Security 我的应用程序是否应该发布它';当使用外部oauth2提供商(facebook)时,用户是否拥有自己的访问令牌?

Security 我的应用程序是否应该发布它';当使用外部oauth2提供商(facebook)时,用户是否拥有自己的访问令牌?,security,facebook-graph-api,oauth-2.0,access-token,Security,Facebook Graph Api,Oauth 2.0,Access Token,我想让用户可以在我的应用程序中使用外部oauth2提供商(facebook)登录。客户端部分在本机应用程序的移动设备上运行 我不确定我应该选择以下哪种方法 客户端是否应该通过facebook向每个请求发送用户的访问令牌?每次请求时,后端都会要求facebook验证访问令牌。后端根据验证结果执行授权并将相应结果返回给客户端 后端是否应要求facebook仅在用户登录时验证访问令牌,然后发布自己的访问令牌,将访问令牌返回给客户端,客户端将在向服务器发出请求时使用此访问令牌,以避免在每次请求时联系fa

我想让用户可以在我的应用程序中使用外部oauth2提供商(facebook)登录。客户端部分在本机应用程序的移动设备上运行

我不确定我应该选择以下哪种方法

  • 客户端是否应该通过facebook向每个请求发送用户的访问令牌?每次请求时,后端都会要求facebook验证访问令牌。后端根据验证结果执行授权并将相应结果返回给客户端

  • 后端是否应要求facebook仅在用户登录时验证访问令牌,然后发布自己的访问令牌,将访问令牌返回给客户端,客户端将在向服务器发出请求时使用此访问令牌,以避免在每次请求时联系facebook

  • 我读过一些关于如何在facebook上实现auth的问题,大多数开发人员都在使用B,但我没有看到任何解释为什么使用A是好的/不好的

    我认为这些解决方案的好处是:

  • 后端不需要关心发布、刷新和验证访问令牌,因为这只由facebook的授权服务器完成
  • 这个解决方案似乎更有效,因为它不需要每次请求都连接到facebook

  • Facebook发行的安全代币由签名者签名。API服务器只需要访问公钥即可验证签名。用户认证后,根本不需要联系Facebook

    用户登录Facebook后发行自己的代币的原因可能是向代币添加声明。但很明显,拥有自己的授权服务器是有代价的。这取决于你权衡利弊


    如果您决定拥有自己的授权服务器,请确保不要编写自己的授权服务器!有一些开源选项,比如。

    我将投票支持选项B,下面是我的解释

  • 您的API每次都必须使用某种身份验证令牌授权请求,该令牌不能是外部提供者令牌,在这种情况下,任何具有其他提供者的访问令牌(例如:其他开发人员)的人都可以访问您的API,这里基本上没有身份验证

  • 当您的服务器发出访问令牌时,它很容易验证,并且在需要时可以很容易地撤销(例如:密码重置时)

  • 在进行身份验证时,服务器可以完全控制访问令牌的颁发,因此验证只进行一次,而不必每次调用API时都进行验证