我正在阅读网站Oauth.com,试图了解如何在单页应用程序中实现安全性,这时我发现了以下语句:
"没有客户端机密的授权代码授予的唯一安全方法是使用"state"参数并将重定向URL限制为受信任的客户端。由于没有使用机密,因此除了使用注册的重定向URL之外,没有其他方法可以验证客户端的身份">
如果我没有正确设置,他说我可以使用注册的重定向URL来验证我的SPA的身份。
问题1:如果我将授权代码重定向到url(web服务器(,我如何将其(或访问令牌,或受保护的资源(放回在浏览器中运行的SPA中?
问题2:在这个注册的url中可以进行什么样的检查来验证我的SPA身份?
Q1。您将收到一个授权代码作为查询参数中的登录响应。然后将其交换为访问令牌。然后使用访问令牌调用API。
Q2.使用HTTPS来证明您拥有重定向URI。使用PKCE在运行时创建一次性使用机密。
矿山资源
也许这些资源会让你有一个更清晰的想法——随时发布任何后续问题。。
- SPA消息工作流
- SPA教程+代码示例
授权码作为code
查询参数包含在URL中,因此您可以从SPA访问它(例如使用window.location.search
(。这将取决于OAuth2提供者,您是否能够将该代码交换为SPA中的访问令牌。
如果您使用web服务器来执行代码->代币交换,您需要将代币放入您的SPA可以访问的数据库中。
OAuth.com的引用提到了两种安全措施,state
参数和注册的重定向URL。这可以防止两种不同的攻击:
-
state
参数可防止攻击者使用带有被盗授权码的URL来检索受害者用户的访问令牌,并将其与攻击者的帐户关联。通过验证URL中的state
参数与您提供给授权服务器的state
参数相同,可以确保重定向是由授权服务器生成的,而不是由攻击者生成的。 -
注册的重定向URL阻止攻击者使用您的客户端ID,但将用户发送到授权URL,授权后,该URL会将用户重定向到攻击者的web服务器而不是您的web服务器,从而允许攻击者检索用户的访问令牌。对于已注册的重定向URL,授权服务器将仅重定向到您控制的预注册重定向URL,而不会重定向到攻击者的web服务器。
除了自己实现此流,特别是对于SPA,它在OAuth授予类型方面有限制,另一种选择是使用托管OAuth服务。我工作的Xkit是为处理SPAs而设计的,它将所有OAuth流(包括安全考虑因素(从代码中移出。