从 Azure AD 文档中我了解到 ID 令牌用于身份验证,访问令牌是您发送到后端 API 进行授权的内容。
但是我有几个API,它们根据登录用户的角色给出响应。我已经在应用程序角色下的服务主体中配置了角色,如下图所示。
当用户进行身份验证时,ID 令牌包含角色,如下所示。
目前,我在授权标头中发送 ID 令牌,然后后端解码并验证令牌,并根据角色发送适当的响应。
但是我找不到任何文档来证明这个解决方案的合理性。如果有更好/正确的解决方案来实现这一点,请指导我!或者有没有办法从访问令牌发送角色?
您必须使用访问令牌来调用后端API。请参阅 Maria Paktiti 的此博客。
如果您希望角色出现在访问令牌中,请尝试以下步骤:
创建 Microsoft Entra ID 应用程序并添加应用程序角色:
然后将角色分配给企业应用程序中的用户:
并授予API权限:
然后生成访问令牌和 ID 令牌,如下所示:
https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
client_id:ClientID
scope:api://ID/.default openid offline_access
grant_type:authorization_code
code:code
redirect_uri:https://jwt.ms
client_secret:Secret
当您解码访问令牌时,将显示角色:
即使在 ID 令牌中也会显示角色:
因此,要进行基于角色的授权,您可以使用访问令牌。