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