如何简单地获取承载令牌以向 Azure DevOps API 发送请求?

Posted

技术标签:

【中文标题】如何简单地获取承载令牌以向 Azure DevOps API 发送请求?【英文标题】:How to simply get a bearer token to send requests to Azure DevOps API? 【发布时间】:2020-06-02 15:09:19 【问题描述】:

我需要创建一个组织源来托管在我们的 Azure DevOps 环境中的项目之间共享的 nuget 包。

经过几次不成功的尝试和研究,我发现创建组织提要的唯一方法是,按照微软口中的设计,Azure DevOps API。

声明来源:This question on VS dev community 和The MS docs on project-scoped feeds

基本上,我只需要能够在这里执行 POST : https://feeds.dev.azure.com/organization/_apis/packaging/feeds?api-version=5.1-preview.1

与身体:


    "name": "myfeedname",
    "hideDeletedPackageVersions": true,
    "upstreamEnabled": true

当然,还有一个用于验证我自己的 Bearer 令牌。这就是我感到困惑的地方。

最简单的获取方法是什么?我在 Azure DevOps 上的计算机浏览器上通过我公司的 Microsoft AD 帐户登录。在我的浏览器开发工具中,我没有看到任何可以“窃取”以在 PostMan 中使用的 Bearer 令牌。

API docs 描述了一些相关信息,但我对如何在 Postman 中使用它感到困惑:

安全 oauth2

类型:oauth2

流程:访问代码

授权网址: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

作用域名称说明

vso.packaging_write 授予以下能力 创建和阅读提要和包。

这是 Postman 中用于 OAuth2 的接口:

我可以看到文档中的信息与字段 1 - 2 - 3 - 4 的关系,但是,我应该使用什么回调 url?什么证件?我的 Microsoft 电子邮件 + 来自 AD 的密码?

我试过了,我似乎只是从 Postman 那里得到这个:

"$id":"1","innerException":null,"message":"A potentially dangerous Request.Path value was detected from the client (&).","typeName":"System.Web.HttpException, System.Web","typeKey":"HttpException","errorCode":0,"eventId":0

TLDR

如何正确地使用 Postman 或其他工具获取令牌以手动执行我对 Azure DevOps REST API 的一次性请求?

注意事项:

以下信息:Unable to get Authorization code for Devops using Postman oAuth2.0 ,在这里领先:https://github.com/Microsoft/azure-devops-auth-samples/tree/master/OAuthWebSample,我知道我必须注册并运行整个 Web 应用程序。我是否正确理解这一点?我有更简单的方法吗?

【问题讨论】:

@LeoLiu-MSFT 好吧,实际上我们不会为此创建/托管 web 应用程序,所以目前我们只是找到了一种解决方法(即将我们的 nuget 包复制到项目的提要中)需要)。 【参考方案1】:

我了解我必须注册并运行整个 Web 应用程序。我是否正确理解这一点?我有更简单的方法吗?

是的,你是对的。您必须注册整个 Web 应用程序。

作为OAuth2在Postman中的接口,我们需要提供CallbackUrlClientIDClientSecret等。然后,我们查看文件Requesting an OAuth 2.0 token,可以知道Callback URL是:

验证后重定向到的客户端应用回调 URL, 应向 API 提供者注册

所以,我们必须在 Azure DevOps (https://app.vsaex.visualstudio.com/app/register) 中注册一个 OAuth 客户端应用程序,然后我们可以获得以下信息,例如:

您可以查看文档Authorize access to VSTS REST APIs with OAuth 2.0 了解更多详细信息。

AFAIK,目前没有更简单的方法来获取承载令牌以将请求发送到 Azure DevOps API。

希望这会有所帮助。

【讨论】:

以上是关于如何简单地获取承载令牌以向 Azure DevOps API 发送请求?的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 AD 令牌/承载令牌 [Azure-Blob][Bearer-Token] 在 Azure Blob 中放置文件时授权权限不匹配

使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]

Windows Azure Active Directory 承载身份验证

Azure Active Directory RBAC 不返回承载令牌中的角色

如何收集特定令牌以向特定设备发送推送通知

我如何从 HttpClient 获取承载令牌?