security - 使用外部 oauth2 提供商(facebook)时,我的应用程序是否应该发出自己的访问 token ?

标签 security facebook-graph-api oauth-2.0 access-token

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

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

  1. 客户端是否应该通过 Facebook 在每个请求中发送用户的访问 token ?在每个请求中,后端都会要求 facebook 验证访问 token 。后端根据验证结果进行授权,并将相应结果返回给客户端。

  2. 如果后端要求 facebook 仅在用户登录时验证访问 token ,然后发出自己的访问 token ,将访问 token 返回给客户端,客户端将使用此访问 token 向服务器发出请求以避免每次请求都联系 Facebook?

我读过一些关于如何使用 facebook 实现身份验证的问题,并且大多数开发人员都在使用 B,但我还没有看到任何解释为什么使用 A 是好/坏?

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

  1. 后端不需要关心颁发、刷新、验证访问 token ,因为这仅由 Facebook 的授权服务器完成。
  2. 此解决方案似乎更有效,因为它不需要在每次请求时连接到 Facebook。

最佳答案

Facebook 发行的安全 token 使用 digital signature 进行签名。 API 服务器只需要访问公钥即可验证签名。用户通过身份验证后根本无需联系 Facebook。

在用户登录 Facebook 后颁发您自己的 token 的一个原因可能是向 token 添加声明。但显然拥有自己的授权服务器是有代价的。由您来权衡利弊。

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

关于security - 使用外部 oauth2 提供商(facebook)时,我的应用程序是否应该发出自己的访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969507/

相关文章:

Android - Facebook SDK 3 - 如何从非 Activity 类以编程方式登录

Facebook 页面所有者验证

android - 如何授予对关联/辅助 Google 帐户的访问权限

token 的 Facebook 交换代码

c# - 如何授权来自另一个 WebApi 项目的请求

asp.net-mvc - 关于管理员[授权]属性的问题

c# - 是否可以为应用程序中的一个线程显示 UAC 对话框?

c - 哪个 API 用于在 Windows 上加密休眠文件?

javascript - 如何保护应用程序免受第 3 方 js 库中存在的 XSS 向量的攻击?

facebook - 给定一个 Facebook 访问 token ,我怎样才能获得它拥有的权限?