我想澄清一下如何在隐式授权流程中使用 ID 令牌和访问令牌。我有一个使用 MSAL.js 的 Angular SPA 包和一个 Web API。API 不调用任何外部服务,例如 MSFT Graph。后端仅使用来自 JWT 的角色声明来为我们的 API 功能建立 RBAC 授权。
该文档说: https ://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens
id_tokens 作为 OpenID Connect 流的一部分发送到客户端应用程序。它们可以与访问令牌一起发送或代替访问令牌发送,并由客户端用于对用户进行身份验证。
ID 令牌应该用于验证用户是否是他们声称的用户并获取有关他们的其他有用信息 - 它不应该用于代替访问令牌进行授权。
此文档显示了一个身份验证流程,其中使用 ID 令牌而不是访问令牌调用 Web API: https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-授权流
此示例代码也发送 ID 令牌(调用自己的 Web API 示例): https ://github.com/Azure-Samples/active-directory-javascript-singlepageapp-dotnet-webapi-v2
示例后端根据发布它的应用程序的客户端 ID 验证 ID 令牌受众。
鉴于我们的 API 是令牌的唯一消费者,我们应该使用 ID 令牌还是访问令牌?