Zil*_*iav 5 security authentication rest oauth-2.0 openid-connect
我有一个由REST API服务器支持的SPA应用程序。
我使用隐式授予流将Auth0用于身份验证和授权。
我阅读的所有示例都说明我应该将接收到的访问令牌发送给api以用于授权目的。例如:https :
//auth0.com/blog/why-should-use-accesstokens-to-secure-an-api
另一方面,我读到访问令牌不能用作身份验证的证明:
http
: //www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html https:// oauth.net/articles/authentication/
这意味着,我不能信任访问令牌上的子声明,以确保这确实是用户,而不是发送访问令牌的另一个客户端。意思是,如果我将使用facebook作为IDP,则另一个Web应用程序可以将用户发布给其使用的访问令牌发送到我的服务器,并且由于该访问令牌没有aud声明,因此我的服务器会认为该用户已通过身份验证在我的网络应用中。而且,我看到google登录确实指导了spa将ID令牌发送到服务器:https : //developers.google.com/identity/sign-in/web/backend-auth
所以:我是否应该将ID令牌(用于认证)和访问令牌(用于授权)都发送到服务器?
正如您所指出的,我通过后端服务器进行了身份验证。正如它所建议的,可以使用 id 令牌对后端服务器进行身份验证。这不仅是谷歌推荐的,也有其他一些实体推荐的。但 id 令牌旨在供依赖方(客户端)验证和验证最终用户。访问令牌是应该用于访问资源的令牌。
您可以考虑的一种替代方案是使用OpenID Connect 规范定义的用户信息端点。
UserInfo 端点是 OAuth 2.0 受保护资源,它返回有关经过身份验证的最终用户的声明。为了获取所请求的有关最终用户的声明,客户端使用通过 OpenID Connect 身份验证获得的访问令牌向 UserInfo 端点发出请求。这些声明通常由 JSON 对象表示,该对象包含声明的名称和值对的集合。
Google 确实提供了用户信息端点。他们的文档的 获取用户配置文件信息部分解释了端点、如何调用它以及响应详细信息。
要获取有关用户的其他配置文件信息,您可以使用访问令牌(您的应用程序在身份验证流程中收到的令牌)和 OpenID Connect 标准:
成功的详细信息将显示最终用户信息,其格式在People: getOpenIdConnect格式中进行了解释。
这样您就可以避免将 id 令牌暴露给其他方。您的后端可以使用访问令牌来访问这些信息,以检测最终用户并据此进行身份验证。
无论这些替代方法如何,id 令牌都旨在用于身份验证。因此,只要您保护 id 令牌,将其传递到服务器并使用声明来识别最终用户并验证令牌有效性就可以了。
| 归档时间: |
|
| 查看次数: |
919 次 |
| 最近记录: |