Azure AD - 令牌中缺少角色声明

Posted

技术标签:

【中文标题】Azure AD - 令牌中缺少角色声明【英文标题】:Azure AD - missing roles claim in the token 【发布时间】:2020-02-13 07:25:56 【问题描述】:

我已经通过 Azure Active Directory (AAD) 设置了身份验证,并且一切正常(我收到了访问和刷新令牌)。

我已阅读有关应用程序角色的信息并且我想使用它们(为简单起见,假设我想要拥有管理员和用户角色)。我遵循了官方文档(缺少最后一部分..)here。

很遗憾,令牌不包含“角色”声明。

这里是我的更详细的设置:

1) 我有一个名为 TestAuthApp 的 Azure AD 应用程序,并且我在清单中添加了角色

2) 我分配了角色

3) 这是登录网址: https://login.microsoftonline.com/3926f5f4-ca60-46de-b9f8-72639d55232d/oauth2/authorize?client_id=fea5d169-5535-4a8c-ba61-bcb0b25129dd&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A1338%2Fauth

4) 这是处理身份验证代码并接收令牌的 node.js 代码

5)的令牌用于测试乔(当检查它在jwt.io你看到的角色,根据权利要求不存在返回的访问实施例)eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImFQY3R3X29kdlJPb0VOZzNWb09sSWgydGlFcyIsImtpZCI6ImFQY3R3X29kdlJPb0VOZzNWb09sSWgydGlFcyJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8zOTI2ZjVmNC1jYTYwLTQ2ZGUtYjlmOC03MjYzOWQ1NTIzMmQvIiwiaWF0IjoxNTcxMjMxNjQwLCJuYmYiOjE1NzEyMzE2NDAsImV4cCI6MTU3MTIzNTU0MCwiYWNyIjoiMSIsImFpbyI6IjQyVmdZT0F5czRzdGFOclB0MFNtWUNOZllxamtuczNMcnpYLzhacTY1NjRXaTBuVXdwMEEiLCJhbXIiOlsicHdkIl0sImFwcGlkIjoiZmVhNWQxNjktNTUzNS00YThjLWJhNjEtYmNiMGIyNTEyOWRkIiwiYXBwaWRhY3IiOiIxIiwiaXBhZGRyIjoiOTQuMjMwLjE1MC40IiwibmFtZSI6IlRlc3QgSm9lIiwib2lkIjoiZDU3YjZlNjAtNzVhMC00ODM4LTllYmMtZWM1MzRkYjAyMTM0IiwicHVpZCI6IjEwMDMyMDAwNDhGOEMwNEQiLCJzY3AiOiJVc2VyLlJlYWQiLCJzdWIiOiJURllOclNGT01EcU5kRnBaY25YeGdoRm1GR2IteHFZN3Y2bDh6R1lhRGg4IiwidGVuYW50X3JlZ2lvbl9zY29wZSI6Ik5BIiwidGlkIjoiMzkyNmY1ZjQtY2E2MC00NmRlLWI5ZjgtNzI 2MzlkNTUyMzJkIiwidW5pcXVlX25hbWUiOiJ0ZXN0am9lQHNlY3VyaXR5cG9jMTIzNC5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJ0ZXN0am9lQHNlY3VyaXR5cG9jMTIzNC5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJHQUJCYy1TaTBVbXZMMzVBRXk4V0FBIiwidmVyIjoiMS4wIn0.Z8gydgRzEqk9dZ_fxt67iZMwVqu708WrZWJf3_9ydgc9cV0HizECxXxeNuws6EtiQhLxnguOVYKq7s5R2V4AlquAnc75YaMn0mWhZXGEtuVT6T6tldy5GgrbDpJy9eU5Ismo5ppfkcGRkUoJ0lScHeXic1gQ_M_k44e-QXJtMMxr6JdPA9jqixuCMK-84TdbYC1RlJYM47PJfYttWoibI29XsoUU-0ucwcCB8hshZfQRU48LrTlCwmtB-p9rim6E7xLmBxaXMBo99N9AizGJj9jV-rr_bPGXpq8_CQsiF07cKJ51SWe8dbMpCwybKYVVoMc3rsazylKcJzxDp1rD4A P>

【问题讨论】:

【参考方案1】:

令牌是不适合您的应用的访问令牌。您要查找的角色应该在 id 令牌中。

之所以这么说是因为受众是00000002-0000-0000-c000-000000000000,这是一个内置的API(虽然不记得是哪个)。

【讨论】:

这正是问题所在,我没有检查 id_token,谢谢 :) 根据本文档,角色也可以在访问令牌docs.microsoft.com/en-us/azure/active-directory/develop/… 是的,但前提是访问令牌所针对的应用程序要求包含它们。 @juunas 要求的声明名称是什么?我似乎无法让我的访问令牌中包含的“角色”声明为此苦苦挣扎了好几天。它们确实会在我的 id_token 中弹出,但不会在我的访问令牌中弹出。有什么提示吗? 感谢@juunas 的回答,我无法访问令牌中的角色。感谢您的回答,我意识到我没有在请求参数(client_id、grant_type 等)中分配资源,因此默认情况下资源为 00000002-0000-0000-c000-000000000000。在参数中添加资源为我解决了这个问题。

以上是关于Azure AD - 令牌中缺少角色声明的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure AD 发出 JWT 令牌中的角色

如何使用 Azure AD MSAL 库将角色包含到访问令牌中

在 Azure AD B2C 中请求令牌时缺少范围“scp”

Azure Active Directory 令牌在 JWT 中缺少应用角色

Azure AD:如何将安全组和应用程序角色都放入访问令牌

无法从 azure AD 应用清单分配角色