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

时间:2018-12-14 23:30:21

标签: azure jwt azure-active-directory azure-devops-rest-api msal

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

2 个答案:

答案 0 :(得分:1)

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 aud声明。

希望这可以帮助其他人阻止此问题。

答案 1 :(得分:0)

我认为您需要将范围“ 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