【问题标题】:How do you use OAuth2 authentication for use with DevOps REST services API - service to service?您如何使用 OAuth2 身份验证与 DevOps REST 服务 API - 服务到服务一起使用?
【发布时间】:2020-07-20 23:53:28
【问题描述】:

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

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

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

这里的文档确实令人困惑,因为它将 Oauth 2 流程称为“accessCode”,据我所知,它不是任何有效流程类型的名称。

在调用 API 的主要文档中

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 的 URL 编码“代码”

{2}:在应用中注册的回调 URL

这与创建版本的文档(第一个链接)不一致,该文档说:

类型:oauth2 流程:accessCode

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

令牌网址: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 会支持 Oauth 2 授权类型的 client_credentials(授权代码授权),但我在 ADO REST 服务的文档中看不到任何此类示例。

【问题讨论】:

    标签: azure oauth-2.0 azure-devops-rest-api


    【解决方案1】:

    要对您的网络应用用户进行 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 服务 API 时,请使用该用户的访问令牌。

    【讨论】:

    猜你喜欢
    • 2020-06-24
    • 2020-01-20
    • 2019-01-24
    • 2012-04-09
    • 2016-01-27
    • 1970-01-01
    • 2019-08-01
    • 2015-09-16
    • 2017-08-15
    相关资源
    最近更新 更多