【发布时间】:2019-05-10 14:54:37
【问题描述】:
我正在尝试仅允许通过批准的单页应用程序访问我们面向公众的 API。 我们目前使用 OAuth 2.0 来控制对我们 API 的访问。高级场景是我们的用户将访问我们公开可用的 SPA,提供他们的用户名和密码,然后能够使用 SPA,而后者又能够使用我们的 API。
OAuth 2.0 与 SPA 的当前最佳实践是使用授权码授权和客户端 ID,但没有客户端密码,因为显然 SPA 无法保留任何密码。
我的问题是如何防止第三方 SPA 访问我们的 API。 IE。他们可以从我们的 SPA 中提取现有的 client_id 并以与我们的第一方 SPA 相同的方式请求授权码。假设他们可以说服用户登录,他们就可以访问我们的 API。 在这种情况下,预注册的重定向 URL 是唯一的防御措施吗?如果是这样,这是否意味着如果我们切换到使用资源所有者凭据授予来获得更好的用户体验(我知道不推荐),就根本没有第三方应用程序的保护?
我已经阅读了 OAuth 的各种 RFC,尤其是这个页面非常有用,但并不能完全回答我的问题: https://auth0.com/blog/oauth2-implicit-grant-and-spa/
【问题讨论】:
-
公共客户端应该注册他们的重定向 URI。如果恶意应用程序试图获取访问令牌,授权服务器应该拒绝请求,因为重定向 URI 不在列表中
标签: oauth-2.0