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审计声明。
希望这有助于其他人阻止此问题。