标签: facebook-oauth

如何在服务器端完全启用Facebook OAuth 2.0?

我基本上想要保存给定用户的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

8
推荐指数
1
解决办法
5118
查看次数

facebook-oauth目前的纯python解决方案?

看起来我并不是唯一一个试图完全避免使用OAuth 2.0服务器端的解决方案的人.人们可以做任何事情,但他们无法注销:

Facebook Oauth退出

使用facebook图api的Oauth注销

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

8
推荐指数
1
解决办法
815
查看次数

OAuthException"(#210)主题必须是页面."

(#210) Subject must be a page.即使我使用的是页面访问令牌而不是应用程序访问令牌,我仍然会收到OAuthException 错误.

我使用以下内容:

  1. 来自facebook的最新JavaScript SDK (//connect.facebook.net/en_US/all.js)
  2. /{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

8
推荐指数
1
解决办法
5732
查看次数

用Facebook oauth登录,没有完整的facebook.com访问权限

我正在开发的Web应用程序需要用户才能通过Facebook OAauth登录.但问题是,所有这些用户都在阻止访问facebook.com(公司政策)的防火墙后面.我们已经研究了几种解决方案来解决这个问题,比如:

  • 在Facebook和用户之间放置(鱿鱼)代理.这可以解决问题,因为squid支持基于细粒度的基于正则表达式的ACL.但是,大多数Facebook OAuth策略都在www.facebook.com上运行,并且如果用户使用HTTPS(这是强制性的),则无法检查PATH_INFO以将特定路径列入白名单.
  • 在防火墙的DMZ中添加类似代理的站点,它只是传递并改变了URL/Facebook请求.这显然不是要走的路,因为它基本上意味着用户将他们的凭据留在我们的服务器上,这违反了Facebook的条款.
  • 稍微放松防火墙以启用OAuth身份验证所需的IP地址,但据我们所知,没有专门的IP或子域只是用于身份验证(如果graph.facebook.com提供某些内容,那将会很好像这样).

有替代解决方案的想法吗?这甚至可能吗?

ssl proxy facebook oauth facebook-oauth

8
推荐指数
1
解决办法
1935
查看次数

Facebook登录错误:无法打开流:HTTP请求失败!HTTP/1.0 400错误请求

我试图按照这个例子从这里创建一个服务器端登录到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)

php facebook oauth facebook-oauth facebook-php-sdk

8
推荐指数
1
解决办法
4644
查看次数

寻找正确的方法:Spring Social + Spring RESTful API + Spring WebApp + Mobile Clients

我有一个使用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

8
推荐指数
1
解决办法
1788
查看次数

OAuth 2.0 - 客户端机密是否必须是“机密”?

我只是好奇 - 我是否需要将来自 Google/FaceBook/其他 OAuth 2.0 提供商的client_secret保存在“秘密”位置?就我所见,只要我指定了非常严格的回调网址,就可以使用 client-secret 参数完成的事情很少。

例如,将“秘密”密钥提交到 github/bitbucket/etc 作为某些实时网络项目的公共存储库是否安全?

据我所知,client-secret 与 google/facebook 上的开发者帐户没有任何共同之处,因此不可能将其用于劫持或欺骗。

我错过了什么吗?谢谢!

oauth-2.0 facebook-oauth google-oauth

8
推荐指数
1
解决办法
1076
查看次数

仅使用Flask-Social和Oauth提供程序,无本地注册/登录表单

如果我只想使用Facebook登录,例如用户注册和登录,即没有本地注册/登录表格,是否可以使用Flask-Social和Flask-Security?

我查看了Flask-Social示例应用程序和文档,但无法判断这是否可行.在示例应用程序中,用户无法使用Facebook登录,除非他们之前已注册过.在注册示例应用程序后,他们可以将他们的Facebook帐户与其本地帐户相关联.

当我试图调用social.facebook.get_connection()时,我得到了一个,AttributeError 'AnonymousUser' object has no attribute 'id'因为没有current_user,这是在注册/登录后由flask-security定义的.

python flask facebook-oauth flask-security

8
推荐指数
1
解决办法
1286
查看次数

在开发和生产环境中使用OAuth

我已经看到了关于此的其他问题(这里,这里,这里),但我对任何解决方案都不满意,所以我再问一遍.我正在启动一个Web应用程序,它将利用来自多个提供商(Google,Facebook,Twitter,Yahoo)的OAuth进行身份验证.我正在努力寻找适合用于本地开发环境和生产环境的配置.

我发现的主要解决方案是在每个提供商中注册多个应用程序,为每个提供商接收不同的消费者密钥和秘密:

"我的应用程序生产" - 带有http://www.myapp.com/callback的回调URI

"我的应用程序开发" - 带有http://local.myapp.com/callback的回调URI

添加到您的本地主机入口文件指向local.myapp.com127.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吗?

oauth twitter-oauth facebook-oauth google-oauth

8
推荐指数
1
解决办法
4399
查看次数

在MVC5中使用OAuth时,无限循环返回到身份验证页面

我写了一个网页,利用了使用MVC5和OAuth的Google/Facebook身份验证

有时候,我可以使用脸书或谷歌来表现出色.它运作得很好.

然而,经常会发生什么

  1. 导航到登录页面
  2. 选择谷歌或Facebook
  3. 提供帐户信息,获取必要的重定向
  4. 重定向回登录页面,但未登录

我没有收到(或者没有找到正确的地方)任何让我感到困惑的错误 - 我在Azure上使用SSL进行托管

有没有人提供有时为什么有效的提示,有时却没有?这感觉它可能是一个cookie的东西,或者可能是服务器端配置问题?我无法弄清楚为什么它有时会工作,有时候也无法工作.

我试过了

  • 使用第二台机器,一台从未登录过(以排除cookie),同样的问题
  • 清除我的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

8
推荐指数
1
解决办法
3722
查看次数