X. *_* Ou 2 azure jwt azure-active-directory azure-ad-msal azure-devops-rest-api
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"
Run Code Online (Sandbox Code Playgroud)
在 MSAL/v1 中,aud 是 Azure DevOps 的唯一 uri:
"aud": "https://app.vssps.visualstudio.com"
Run Code Online (Sandbox Code Playgroud)
有没有人能够使用具有 user_impersonation 委派权限的 MSAL.js 来访问 Azure DevOps rest API?如果是这样,是否缺少让 MSAL 工作的东西?
他们的 JWT 验证是否可能还没有考虑到第二个受众价值?
看起来 Azure DevOps 是一个 v1.0 应用程序,所以我试图让它与 Azure 门户在设置委派权限时建议的错误 v2.0 范围一起工作:
scopes: ['https://app.vssps.visualstudio.com/user_impersonation']
Run Code Online (Sandbox Code Playgroud)
但是,根据这个doc,在与 v1.0 应用程序交谈时,范围应该使用资源 Id 作为前缀。以下是 Azure DevOps 资源 ID 的工作范围:
scopes: ['499b84ac-1321-427f-aa17-267ca6975798/user_impersonation']
Run Code Online (Sandbox Code Playgroud)
这解决了 aud 字段的问题,因此我再次拥有 499b84ac-1321-427f-aa17-267ca6975798 的 JWT aud 声明。
希望这可以帮助其他人阻止此问题。
| 归档时间: |
|
| 查看次数: |
2477 次 |
| 最近记录: |