如何使用MSAL.js为Azure DevOps获取有效的AAD v2令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用MSAL.js为Azure DevOps获取有效的AAD v2令牌相关的知识,希望对你有一定的参考价值。

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验证还没有考虑到第二个受众价值?

答案

看起来Azure DevOps是一个v1.0应用程序,因此我尝试使用Azure Portal在设置委派权限时建议的错误的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审计声明。

希望这有助于其他人阻止此问题。

以上是关于如何使用MSAL.js为Azure DevOps获取有效的AAD v2令牌的主要内容,如果未能解决你的问题,请参考以下文章

Azure MSAL JS:如何编辑配置文件?

如何在不使用 ADAL.js 或 MSAL.js 的情况下将我的 activiti 应用程序(版本 6)与 Azure Active Directory 端点 v2.0 集成

Electron + Vue + msal-nodejs + Azure Ad:重定向 URL 问题

使用 MSAL Angular 包装器在 Ionic 4 中处理来自 Azure AD 的回调

如果用户从 msal .net 代码登录,则无法使用 msal.js 静默获取访问令牌

Azure devops - 从单个版本定义运行多个版本