我有 3 个不同的应用程序注册应用程序。所有都是后端 API,并使用 azure-identity 模块进行身份验证。为了提高安全性,我们使用托管身份通过 KeyVault 和其他 Azure 服务进行身份验证,以避免客户端机密。我正在尝试弄清楚如何代表用户对 Azure 中的其他应用程序进行身份验证 + 我需要代表用户访问 Azure DevOps API。
我已经尝试过并希望能起作用,但没有成功: 在我的
App1->API Permissions
->
添加了 Azure DevOps user_impersonation 权限。
使用
az cli
我获得了 App1 的访问令牌:az account get-access-token --resource "api://<app1-client-id>"
我可以使用令牌访问我的 App1 API,没有问题,但我无法将相同的令牌传递给 Azure DevOps API,而只能从 API 返回“Azure DevOps Sing in”页面。
我是否缺少某些配置或概念上做错了什么?我是否需要将现有令牌交换为可用于 Azure DevOps 的另一个令牌?
通过
Azure DevOps
将 user_impersonation
App1->API Permissions
添加到您的应用程序只是第一步。这将允许您将您的 App1
用户令牌交换为 Azure DevOps
用户令牌。
代币交换需要通过代表流程进行。我认为这个代币交换请求的范围需要是
499b84ac-1321-427f-aa17-267ca6975798/.default
。请参阅 Azure DevOps 文档中的本节。
注意:此令牌交换必须使用共享密钥进行。还有一种记录的方法可以使用 jwt-bearer 客户端断言交换令牌,但尝试交换用户令牌失败,并显示错误代码AADSTS700229。请参阅此 GitHub 问题。