如何使用 MSAL.js 为 Azure DevOps 获取有效的 AAD v2 令牌
Posted
技术标签:
【中文标题】如何使用 MSAL.js 为 Azure DevOps 获取有效的 AAD v2 令牌【英文标题】:How to get valid AAD v2 token using MSAL.js for Azure DevOps 【发布时间】:2019-05-16 05:22:16 【问题描述】:ADAL.js 和 AAD v1 使用委托的 user_impersonation 范围访问 Azure DevOps。
我使用具有委派权限的相同 AAD 应用程序 ID 来使用 MSAL.js 生成访问令牌。令牌已成功创建,但访问令牌无法访问 Azure DevOps。
解码后的 JWT 令牌中唯一有意义的区别是“aud”声明不同。
在 ADAL/v1 中,aud 是 Azure DevOps 的应用程序 ID:
"aud": "499b84ac-1321-427f-aa17-267ca6975798"
在 MSAL/v1 中,aud 是 Azure DevOps 的唯一 uri:
"aud": "https://app.vssps.visualstudio.com"
是否有人能够使用具有 user_impersonation 委派权限的 MSAL.js 来访问 Azure DevOps REST API?如果是这样,是否缺少使 MSAL 工作的东西?
他们的 JWT 验证是否可能还没有考虑到第二个受众价值?
【问题讨论】:
【参考方案1】:我认为您需要将“499b84ac-1321-427f-aa17-267ca6975798/.default”范围传递给 MSAL acquireTokenSilent
。为您提供的令牌应该与 DevOps 一起使用。
myMsalInstance.acquireTokenSilent(['499b84ac-1321-427f-aa17-267ca6975798/.default'])
类似问题位于此处:Getting OAuth tokens for Azure DevOps API consumption
【讨论】:
【参考方案2】:看起来 Azure DevOps 是一个 v1.0 应用程序,所以我试图让它在设置委派权限时 Azure 门户建议的错误 v2.0 范围内工作:
scopes: ['https://app.vssps.visualstudio.com/user_impersonation']
但是,根据doc,作用域在与 v1.0 应用程序对话时应使用资源 ID 作为前缀。这是 Azure DevOps 资源 ID 的工作范围:
scopes: ['499b84ac-1321-427f-aa17-267ca6975798/user_impersonation']
这解决了 aud 字段的问题,因此我再次拥有 499b84ac-1321-427f-aa17-267ca6975798 的 JWT aud 声明。
希望这有助于其他人在此问题上被阻止。
【讨论】:
你如何确定它是 1.0 应用程序? 谢谢,这在 2022 年仍然是一个问题,您的解决方案完美运行。以上是关于如何使用 MSAL.js 为 Azure DevOps 获取有效的 AAD v2 令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 ADAL.js 或 MSAL.js 的情况下将我的 activiti 应用程序(版本 6)与 Azure Active Directory 端点 v2.0 集成
Electron + Vue + msal-nodejs + Azure Ad:重定向 URL 问题
使用 MSAL Angular 包装器在 Ionic 4 中处理来自 Azure AD 的回调