我基本上想要保存给定用户的Facebook ID,以便我可以通过Facebook接收更多资料.理想情况下,我想要一个既不使用javascript也不使用cookie的解决方案,只是服务器端,但没有示例,只是方向,所以我把我们可以讨论的内容放在一起.当我将用户链接到我的网站的OAuth对话框时,这是我认为有用的代码:
https://www.facebook.com/dialog/oauth?client_id=164355773607006&redirect_uri=http://www.kewlbusiness.com/oauth
然后我像这样处理它以获取userdata:
class OAuthHandler(webapp2.RequestHandler):
def get(self):
args = dict(
code = self.request.get('code'),
client_id = facebookconf.FACEBOOK_APP_ID,
client_secret = facebookconf.FACEBOOK_APP_SECRET,
redirect_uri = 'http://www.koolbusiness.com/oauth',
)
file = urllib.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args))
try:
token_response = file.read()
finally:
file.close()
access_token = cgi.parse_qs(token_response)["access_token"][-1]
graph = facebook.GraphAPI(access_token)
user = graph.get_object("me")
self.response.out.write(user["id"])
self.response.out.write(user["name"])
Run Code Online (Sandbox Code Playgroud)
所以有了这个我可以"登录Facebook"为我的网站没有很多杂乱的javascript和我们不想要的cookie.我想为我的网站启用"使用Facebook登录".它应该没有cookie和没有javascript工作,但他们试图让你做的第一件事是Javascript和cookie.所以我已经制定了一个似乎没有cookie而且没有javascript的解决方案,只有OAuth 2.0:你能谈谈我的"解决方案"吗?我正在寻找的实际用途是启用简单的功能,FB用户在我的网站上做了什么,并承认Facebook帐户以标准化的方式登录.
我只是认为它必须工作没有JavaScript SDK和没有cookie,似乎是这种情况.你能说出这个"解决方案"的优点和缺点是什么吗?我认为它比Javascript + Cookie好得多,所以当最小的例子似乎是100%服务器端时,他们为什么欺骗我们使用javascript和cookie?
谢谢
更新 它似乎正确,行为正确,我也可以使用userdata与数据库,并将我的FB名称渲染到首页没有javascript和没有cookie,只是python:
class FBUser(db.Model):
id = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
name = db.StringProperty(required=True)
profile_url = db.StringProperty()
access_token = db.StringProperty(required=True)
name = db.StringProperty(required=True)
picture = …Run Code Online (Sandbox Code Playgroud) python google-app-engine facebook facebook-graph-api facebook-oauth
看起来我并不是唯一一个试图完全避免使用OAuth 2.0服务器端的解决方案的人.人们可以做任何事情,但他们无法注销:
Facebook OAuth2 Logout不会删除fb_ cookie
OAuth 2.0与Facebook 的官方文档说:
您可以通过将用户指向以下URL来将用户从Facebook会话中注销:
https://www.facebook.com/logout.php?next=YOUR_URL&access_token=ACCESS_TOKEN
YOUR_URL必须是您的站点域中的URL,如Developer App中所定义.
我想做所有服务器端,我发现建议的链接方式离开cookie,以便注销链接不起作用:
https://www.facebook.com/logout.php?next=http://{{host}}&access_token={{current_user.access_token}}
它确实重定向,但它不会将用户从我的网站中注销.它似乎是一个Heisenbug,因为这改变了我,并没有太多的文件.无论如何我似乎能够通过操纵cookie的处理程序来实现功能,这样实际上用户就会被注销:
class LogoutHandler(webapp2.RequestHandler):
def get(self):
current_user = main.get_user_from_cookie(self.request.cookies, facebookconf.FACEBOOK_APP_ID, facebookconf.FACEBOOK_APP_SECRET)
if current_user:
graph = main.GraphAPI(current_user["access_token"])
profile = graph.get_object("me")
accessed_token = current_user["access_token"]
self.set_cookie("fbsr_" + facebookconf.FACEBOOK_APP_ID, None, expires=time.time() - 86400)
self.redirect("https://www.facebook.com/logout.php?next=http://%s&access_token=%s" get_host(), accessed_token)
def set_cookie(self, name, value, expires=None):
if value is None:
value = 'deleted'
expires = datetime.timedelta(minutes=-50000)
jar = Cookie.SimpleCookie()
jar[name] = value
jar[name]['path'] = '/'
if expires:
if isinstance(expires, datetime.timedelta): …Run Code Online (Sandbox Code Playgroud) python google-app-engine facebook facebook-graph-api facebook-oauth
(#210) Subject must be a page.即使我使用的是页面访问令牌而不是应用程序访问令牌,我仍然会收到OAuthException 错误.
我使用以下内容:
/{PAGE_ID}/tabs?app_id={APP_ID}&method=POST&access_token={PAGE_ACCESS_TOKEN}用户登录后调用FB.api方法.我的应用程序不是FBML,而是Canvas/iFrame应用程序.我究竟做错了什么?
我已经研究过网络,包括Stackoverflow和其他facebook论坛,但仍然没有答案.我的应用程序启用了OAuth.
另外,如果我在浏览器中复制并粘贴链接,它可以正常工作.如果我使用API,它不会.
javascript facebook-page facebook-graph-api facebook-javascript-sdk facebook-oauth
我正在开发的Web应用程序需要用户才能通过Facebook OAauth登录.但问题是,所有这些用户都在阻止访问facebook.com(公司政策)的防火墙后面.我们已经研究了几种解决方案来解决这个问题,比如:
有替代解决方案的想法吗?这甚至可能吗?
我试图按照这个例子从这里创建一个服务器端登录到Facebook ,但没有运气.在步骤7中,当我尝试使用令牌交换代码并将其存储在会话中以供以后使用时,我总是会收到此错误:
file_get_contents(): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
Run Code Online (Sandbox Code Playgroud)
我知道这已经多次询问了,但是我仍然无法解决这个问题,因为根据这个问题,我尝试使用cURL,但它仍然不起作用,它只是返回false.
其他问题告诉我使用PHP SDK,但我不知道使用哪种方法.所以我在这里完全迷失了.
这是我调用登录表单的代码:
<a href="<?php echo LOGIN_URL; ?> ?>" class="btn btn-primary">Login with Facebook</a>
Run Code Online (Sandbox Code Playgroud)
其中LOGIN_URL定义为:
define("LOGIN_URL", $facebook->getLoginUrl(array("redirect_uri" => APP_URL . "fb_login")));
Run Code Online (Sandbox Code Playgroud)
在fb_login中,我有这个代码:
$app->get("/fb_login", function() use($app, $facebook)
{
$code = $_REQUEST["code"];
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . APP_ID . "&redirect_uri=" . APP_URL . $_SESSION["request_uri"] // Previous URL
. "&client_secret=" . APP_SECRET . "&code=" . $code;
$response = file_get_contents($token_url); // Doesn't work
$params …Run Code Online (Sandbox Code Playgroud) 我有一个使用Spring 3.1构建的RESTful API,也使用Spring Security.我有一个Web应用程序,也是一个Spring 3.1 MVC应用程序.我打算让移动客户端访问我的REST API.因此,我的API是进行身份验证,获取数据等的中心位置.到目前为止,这一切都很有意义.
现在我无法理解的是如何以简单明智的方式添加Spring Social.你是怎么做到的?您是否只将ConnectionRepository移动到API?或者你有API做到这一切吗?我想通过各种方式阻止对每个客户端技术的双重授权(防止双重授权意味着userA在webapp中连接到facebook,然后开始使用我们的移动客户端,不应该再次要求连接到facebook b/c userA正在使用不同的客户端).
谢谢你分享你的想法!
spring spring-mvc spring-security facebook-oauth spring-social
我只是好奇 - 我是否需要将来自 Google/FaceBook/其他 OAuth 2.0 提供商的client_secret保存在“秘密”位置?就我所见,只要我指定了非常严格的回调网址,就可以使用 client-secret 参数完成的事情很少。
例如,将“秘密”密钥提交到 github/bitbucket/etc 作为某些实时网络项目的公共存储库是否安全?
据我所知,client-secret 与 google/facebook 上的开发者帐户没有任何共同之处,因此不可能将其用于劫持或欺骗。
我错过了什么吗?谢谢!
如果我只想使用Facebook登录,例如用户注册和登录,即没有本地注册/登录表格,是否可以使用Flask-Social和Flask-Security?
我查看了Flask-Social示例应用程序和文档,但无法判断这是否可行.在示例应用程序中,用户无法使用Facebook登录,除非他们之前已注册过.在注册示例应用程序后,他们可以将他们的Facebook帐户与其本地帐户相关联.
当我试图调用social.facebook.get_connection()时,我得到了一个,AttributeError 'AnonymousUser' object has no attribute 'id'因为没有current_user,这是在注册/登录后由flask-security定义的.
我已经看到了关于此的其他问题(这里,这里,这里),但我对任何解决方案都不满意,所以我再问一遍.我正在启动一个Web应用程序,它将利用来自多个提供商(Google,Facebook,Twitter,Yahoo)的OAuth进行身份验证.我正在努力寻找适合用于本地开发环境和生产环境的配置.
我发现的主要解决方案是在每个提供商中注册多个应用程序,为每个提供商接收不同的消费者密钥和秘密:
"我的应用程序生产" - 带有http://www.myapp.com/callback的回调URI
"我的应用程序开发" - 带有http://local.myapp.com/callback的回调URI
添加到您的本地主机入口文件指向local.myapp.com到127.0.0.1和你的应用程序使用基于环境的正确消费键一些配置,你是好去,对不对?
但我的应用程序是响应式的,我需要测试我的PC上运行的开发环境,从我的iPhone和iPad等多个其他设备运行,这两个设备都无法解析开发回调URI.
假设我的网络上已有DNS服务器,并且能够为其添加条目local.myapp.com而不是我的本地主机文件,现在可以从网络上的任何设备访问我的开发实例.
但我的开发团队都在同一个本地网络上运行.现在local.myapp.com指向每个人的相同IP.让我们回到在每个开发人员的计算机上设置hosts文件,这样他们就可以独立于工作站内工作.现在没有人可以再次从他们的iPhone测试他们的开发实例.对于每个开发人员而言,向提供者注册应用程序似乎不是正确的答案,因此他们可以指定唯一的回调URI.
通常情况下,当我在杂草中找到一个看似简单的问题的复杂解决方案时,通常意味着我做了一些根本错误的事情.我错过了关于OAuth的一些内容,是不是打算像这样使用?我很想完全废弃OAuth,只需要使用OpenID(不需要注册应用程序注册,并且可以在应用程序中指定回调URI),但后来我失去了Facebook和Twitter中的两个重要人物.我真的不需要任何用户的数据,如果它可用,那就太好了.有人能跟我说说OAuth吗?
我写了一个网页,利用了使用MVC5和OAuth的Google/Facebook身份验证
有时候,我可以使用脸书或谷歌来表现出色.它运作得很好.
然而,经常会发生什么
我没有收到(或者没有找到正确的地方)任何让我感到困惑的错误 - 我在Azure上使用SSL进行托管
有没有人提供有时为什么有效的提示,有时却没有?这感觉它可能是一个cookie的东西,或者可能是服务器端配置问题?我无法弄清楚为什么它有时会工作,有时候也无法工作.
我试过了
我是如何配置的:
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Uncomment the following lines to enable logging in with third party login …Run Code Online (Sandbox Code Playgroud) asp.net-mvc oauth-2.0 facebook-oauth google-oauth asp.net-mvc-5
facebook-oauth ×10
facebook ×4
google-oauth ×3
oauth ×3
python ×3
oauth-2.0 ×2
asp.net-mvc ×1
flask ×1
javascript ×1
php ×1
proxy ×1
spring ×1
spring-mvc ×1
ssl ×1