【问题标题】:OAuth2 authentication from a mobile client using Facebook or Google or any other third-parties来自使用 Facebook 或 Google 或任何其他第三方的移动客户端的 OAuth2 身份验证
【发布时间】:2016-04-06 00:00:42
【问题描述】:

我已经实现了一个 OAuth2 服务器,它目前处理两种授权类型,passwordrefresh_token

现在,我需要允许我的客户使用他们的 Facebook 或 Google 帐户进行身份验证,但我的问题可能适用于任何类似的流程。

要针对 Facebook 或 Google 进行身份验证,用户需要授权我的应用程序获取其数据,然后我需要访问 Facebook 或 Google 以实际获取它们。

我认为有两种方法。

  1. 用户登录其 Facebook 帐户,授权我的应用程序并检索访问令牌。它将访问令牌发送到我的服务器,我使用它来获取数据。

  2. 用户登录其 Facebook 帐户,授权我的应用程序并获取授权码,然后将其发送到我的服务器,我使用其授权码为用户获取访问令牌,并使用它来获取它的数据。

根据您的经验和/或最佳实践(我无法找到有关此类工作流程的任何信息),最佳选择是什么?

【问题讨论】:

    标签: facebook authentication oauth oauth-2.0 google-plus


    【解决方案1】:

    在我的工作场所,使用第二种类型(称为显式授权类型)。它优于第一个(称为隐式授权类型)。

    与隐式授权类型相比,显式授权类型的另一个优势是它支持刷新令牌,而隐式不支持刷新令牌,简而言之意味着您必须保持访问令牌的非常长的到期时间,或者用户必须令牌过期后进行重定向舞蹈。

    因此,您使用显式授权类型会更​​安全,因为访问令牌的到期时间不需要非常高(我相信在使用 facebook 或 google 时您无法更改访问令牌的到期时间)并且它不会需要重定向的东西(重新登录)

    【讨论】:

    • 感谢您的回答,有一些非常好的观点。我只是尝试实现这种行为,出于测试目的,我手动执行authorize 请求,但我需要提供redirect_uri,并且我需要重新使用它来获取access_tokenauthorization_code,是有什么我在这里想念的吗?不需要这个redirect_uri,因为authorization_code 应该由移动设备获取,然后作为我自己服务器上的自定义授权类型发送到我的服务器。有什么提示吗?
    • @Trent 据我了解,如果使用重定向方法,则仅在获取access_code 时才需要redirect_uri。如果您有 access_code,您可以获得 access_token,从而获得对授权资源的所有访问权限。我在我的个人项目中使用了Login using google,它不使用重定向,而是使用弹出对话框。我在移动设备方面没有太多经验,但一般来说,如果您从设备获得access_code,则不需要redirect_uri
    • afaik,没有其他方法可以获取access_code,以下请求https://graph.facebook.com/oauth/authorize?redirect_uri=&client_id=someappid&response_type=code 重定向到https://www.facebook.com/dialog/oauth?redirect_uri&client_id=someappid&response_type=code ,由于缺少redirect_uri 而返回错误,我显然可以设置一个虚拟redirect_uri 在客户端和服务器上,但感觉不对。
    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2016-01-23
    • 2023-03-22
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多