在 ADO 中使用 Azure AD 托管身份/服务主体用户来使用 ADO API

问题描述 投票:0回答:2

我正在遵循本指南https://learn.microsoft.com/en-us/azure/devops/repos/git/create-pr-status-server-with-azure-functions?view=azure-devops创建自定义分支策略。文章的要点是:当创建或更新 ADO PR 时,会发生以下情况:

  • ADO 调用 Azure Functions Webhook
  • Azure Functions 执行一些自定义分支策略逻辑(例如,向 PR 添加自定义状态)。

Azure 函数使用 个人访问令牌 通过 ADO 进行身份验证以发布自定义状态。我不喜欢这种方法的两件事:

  • PAT的最长寿命为2年。 2 年后,您需要更新您的 PAT 令牌 - 很容易忘记,需要额外的努力来实现自动化。
  • PAT由用户签发。我希望为自定义分支策略拥有一个单独的“系统”用户。我不想重复使用“活跃”用户(人们倾向于退出),也不想为此目的创建一个“假”活跃用户(公司的安全策略影响)。

因此,我想知道是否有一种方法可以直接在 ADO 中使用 Azure Functions 托管身份/服务主体:向托管身份授予 ADO 权限,并使用 Azure AD 令牌在 ADO API 中对用户进行身份验证。

我知道您可以设置 ADO 组织来使用 Azure AD 用户。这就是我的组织目前的设置方式: 显示所有“活动”用户,但我没有看到任何托管身份/服务主体。看起来只有用户与 ADO 同步。

azure-devops azure-active-directory
2个回答
2
投票

遗憾的是,不支持使用客户端凭据流的 Azure AD 托管身份/服务主体用户对 ADO 进行身份验证。

可以看到这个列表中没有您想要的相关Authenticate方法。

请参阅此答案了解更多详情。


0
投票

现在可以使用托管身份

使用Python,你可以做这样的事情:


from azure.identity import DefaultAzureCredential
from msrest.authentication import BasicAuthentication
from azure.devops.connection import Connection

credentials = DefaultAzureCredential()
ADO_APP_CLIENT_ID = "499b84ac-1321-427f-aa17-267ca6975798/.default"
accessToken = credentials.get_token(ADO_APP_CLIENT_ID)
auth = BasicAuthentication("", accessToken.token)
azure_devops_connection = Connection(base_url="<ado org url>", creds=auth)
... do whatever you want
azure_devops_client = azure_devops_connection.clients.get_git_client()

使用 DefaultAzureCredential,您可以使用托管身份、服务原理、az cli 等进行连接,请参阅 docs 了解可用的环境变量配置。

© www.soinside.com 2019 - 2024. All rights reserved.