关于使用 Facebook 隐式令牌进行服务器端资源服务器 OAuth2 身份验证的安全问题
Security concerns about using Facebook implicit token for server side resource server OAuth2 authentication
我浏览了 OAuth2 文档并了解了 Facebook Javascript SDK 如何使用 Implicit Grant.
我正在构建一个 ReactJs 应用程序,它与 PHP-Symfony API.
通信
我想做的是在前端提供 "Login with Facebook" 选项。
我的 PHP 服务器上需要的是 Facebook 用户 ID 和电子邮件以及用户的其他数据,因此我最初可以在我的数据库中为他们创建用户记录,然后在回访时使用身份验证令牌来获取该用户记录信息再次出现在服务器上,并使用它来匹配现有记录并让用户登录。
我们之前使用 授权码授予 方法将前端重定向到我们的服务器,然后重定向到 facebook,然后使用授权码返回给我们。然后我们在服务器上使用它和我们的 Secret Key 来获取 Access Token 并直接从 Facebook 获取用户信息到我们的服务器然后进行身份验证用户。
重定向对于单页应用来说有点蛋疼。
Facebook 的 Javascript SDK 自动处理了很多,但使用 隐式授权 ,直接向前端返回一个 访问令牌 。
我想知道的是,我是否可以将 Access Token 发送到我的服务器以执行与之前相同类型的身份验证?还是我正在打开一个巨大的安全漏洞?
比较两者,Auth Code 来自 Authorization Code Grant 流程也通过前端,但速度非常快,不是直接到 JavaScript 并且寿命短得多。所以感觉安全多了。
如果及时拦截并匹配状态,它可以用于对我们服务器上的某人进行身份验证,但不能直接访问某人的 Facebook 数据。
重用 Implicit Grant 流程中的前端 Access Token我指的是使它更容易受到攻击的确切情况。该令牌可能使人们不仅可以在我们的服务器上进行身份验证,还可以访问人们的 Facebook 信息。
所以这最终是一个最佳实践和安全问题。
我们认为我们应该能够实现我们自己的弹出 window 执行 授权代码授予 样式流并检索我们的服务器 cookie,然后可以使用通过产生它的页面,但这将是棘手的,并且大部分工作似乎是为 Implicit Grant 方法完成的,如果我们打算使用它是安全的它。
最佳实践并根据 RFC 6749
However, this convenience should be weighed against the security
implications of using implicit grants, such as those described in
Sections 10.3 and 10.16, especially when the authorization code
grant type is available.
我浏览了 OAuth2 文档并了解了 Facebook Javascript SDK 如何使用 Implicit Grant.
我正在构建一个 ReactJs 应用程序,它与 PHP-Symfony API.
通信我想做的是在前端提供 "Login with Facebook" 选项。 我的 PHP 服务器上需要的是 Facebook 用户 ID 和电子邮件以及用户的其他数据,因此我最初可以在我的数据库中为他们创建用户记录,然后在回访时使用身份验证令牌来获取该用户记录信息再次出现在服务器上,并使用它来匹配现有记录并让用户登录。
我们之前使用 授权码授予 方法将前端重定向到我们的服务器,然后重定向到 facebook,然后使用授权码返回给我们。然后我们在服务器上使用它和我们的 Secret Key 来获取 Access Token 并直接从 Facebook 获取用户信息到我们的服务器然后进行身份验证用户。
重定向对于单页应用来说有点蛋疼。 Facebook 的 Javascript SDK 自动处理了很多,但使用 隐式授权 ,直接向前端返回一个 访问令牌 。
我想知道的是,我是否可以将 Access Token 发送到我的服务器以执行与之前相同类型的身份验证?还是我正在打开一个巨大的安全漏洞?
比较两者,Auth Code 来自 Authorization Code Grant 流程也通过前端,但速度非常快,不是直接到 JavaScript 并且寿命短得多。所以感觉安全多了。 如果及时拦截并匹配状态,它可以用于对我们服务器上的某人进行身份验证,但不能直接访问某人的 Facebook 数据。
重用 Implicit Grant 流程中的前端 Access Token我指的是使它更容易受到攻击的确切情况。该令牌可能使人们不仅可以在我们的服务器上进行身份验证,还可以访问人们的 Facebook 信息。
所以这最终是一个最佳实践和安全问题。
我们认为我们应该能够实现我们自己的弹出 window 执行 授权代码授予 样式流并检索我们的服务器 cookie,然后可以使用通过产生它的页面,但这将是棘手的,并且大部分工作似乎是为 Implicit Grant 方法完成的,如果我们打算使用它是安全的它。
最佳实践并根据 RFC 6749
However, this convenience should be weighed against the security implications of using implicit grants, such as those described in Sections 10.3 and 10.16, especially when the authorization code grant type is available.