通过OAuth 2.0 Azure AD访问Azure DevOps API

3
在 Postman 中,我已经设置了一个简单的请求来访问 Azure DevOps API,使用 OAuth 2.0 安全性通过 Azure AD。Azure AD 应用程序已设置为具有用户同意访问 Azure DevOps API 的权限。 https://learn.microsoft.com/zh-cn/rest/api/azure/devops/core/projects/list?view=azure-devops-rest-5.1 我可以获取令牌,但是 Azure DevOps API 始终返回带有登录 HTML 的 203 状态码,而不是 JSON 响应。如果您有任何建议,我将不胜感激。
谢谢。
Postman 请求
GET /[some_org]/_apis/projects?api=5.1 HTTP/1.1
Host: dev.azure.com 
Authorization: Bearer [something] 
User-Agent: PostmanRuntime/7.17.1 
Accept: */* 
Cache-Control: no-cache 
Postman-Token: [something] 
Accept-Encoding: gzip, deflate 
Cookie: VstsSession=[something] 
Referer: https://dev.azure.com/[some_org]/_apis/projects?api=5.1 
Connection: keep-alive cache-control: no-cache

令牌获取详细信息


实际上,使用Azure DevOps API和AAD令牌是被允许的。这里有一个关于C#代码的示例。https://github.com/microsoft/azure-devops-auth-samples/blob/master/ManagedClientConsoleAppSample/Program.cs - Frank Wang-MSFT
1个回答

6
我使用Postman中的OAuth 2.0身份验证成功复制了您的问题。 我开始更深入地了解Azure DevOps的REST API,并找到了相关文档。

https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.1

  1. 关键部分:

对于Azure DevOps Services,实例是dev.azure.com/{organization}, 因此模式看起来像这样:

VERB https://dev.azure.com/{organization}/_apis[/{area}]/{resource}?api-version={version}

如果您希望通过HTTP标头提供个人访问令牌,您必须首先将其转换为Base64字符串(以下示例显示如何使用C#转换为Base64)。 (某些工具例如Postman默认应用Base64编码。如果您正在尝试通过此类工具使用API,则不需要对PAT进行Base64编码)。
Authorization: Basic BASE64PATSTRING

我将我的Postman配置为使用GET请求和基本身份验证(并且它起作用了)。
获取 http://dev.azure.com/ {organization-id} / _apis / projects?api-version = 5.1

GET Request

Basic Authentication

enter image description here

有关 Azure DevOps REST API 的个人访问令牌的更多信息可在此处查看

PS 这里是有关 Azure DevOps REST API 和 OAuth 2.0 身份验证的页面链接 其中提供了有关如何注册应用程序以生成 OAuth 2.0 凭据以进行授权所需的信息。


请纠正我如果我错了,但是您正在使用基本授权,而我需要通过Azure AD使用OAuth 2.0安全性(请检查附加的令牌获取详细信息)。我最初尝试使用您建议的相同链接,但没有成功。谢谢。 - Victoria Polupan
如果您在Postman中的访问令牌字段(使用OAuth 2类型身份验证)中输入PAT,则会收到203错误。 - Kamil
@biswpo,是的,根据帖子中的信息,我正在使用Oauth2从Azure AD获取令牌,而不是使用可以针对Azure DevOps配置文件上的特定用户发行的PAT。根据添加到帖子中的Postman请求示例,我将从“获取新访问令牌”调用返回的令牌作为Authorization: Bearer [token]包含在内。 - Victoria Polupan
@VictoriaPolupan 我认为你不能使用Azure AD授权到Azure DevOps API。唯一的两种方法是PAT和Oauth应用程序注册(例如https://github.com/microsoft/azure-devops-auth-samples/tree/master/OAuthWebSample和https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops)。 - Kamil
没错。OAuth 2.0是一种身份验证类型,Azure AD是其中之一的实现。 - Kamil
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接