您如何使用 OAuth2 身份验证与 DevOps REST 服务一起使用 API - 服务到服务?

How do you use OAuth2 authentication for use with DevOps REST services API - service to service?

我正在尝试为 ADO REST 调用提供服务,从我的应用程序到 ADO,代表应用程序,而不是登录到它的用户。

Microsoft 提供 REST APIs 来执行创建发布管道等操作。看这里:

https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/create?view=azure-devops-rest-5.1#security

文档在这里真的很混乱,因为它指的是 Oauth 2 流程 "accessCode" 据我所知,这不是任何有效类型的流程的名称。

在调用 APIs

的主要文档中

https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops

它说请求正文应该是这样的:

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}

其中

{0}:URL 注册应用程序时获取的编码客户端密码

{1}:URL 编码 "code" 通过代码查询参数提供给您的回调 URL

{2}:回调 URL 注册到应用

这与创建版本的文档(第一个 link)不一致,它说:

类型:oauth2 流程:访问代码

授权URL:https://app.vssps.visualstudio.com/oauth2/authorize&response_type=Assertion

令牌URL:https://app.vssps.visualstudio.com/oauth2/token?client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer

那么首先,有谁知道哪个文档是正确的,第一个还是第二个?

其次,我如何创建服务到服务以从我的应用程序调用,代表应用程序调用这些 API,而不是比用户 ?

我不希望应用程序的用户有权在应用程序内创建发布,因为很多人甚至都不是 ADO 用户,更不用说拥有创建发布的权限了。

我原以为 API 会支持 client_credentials 的 Oauth 2 授权类型(授权代码授权),但我在 ADO REST 的文档中看不到这方面的任何示例服务。

要对您的 Web 应用程序用户进行 REST API 访问身份验证,您应该遵循以下文档:

https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops

首先,注册您的 Web 应用程序并从 Azure DevOps Services 获取应用程序 ID。使用该应用 ID,将您的用户发送到 Azure DevOps Services 以授权您的应用访问他们的组织。接下来,使用该授权为该用户获取访问令牌。当您为该用户调用 Azure DevOps Services APIs 时,请使用该用户的访问令牌。