为了访问Azure DevOps API (repos、工作项、测试计划),我尝试从电子应用程序实现DevOps 2.0身份验证(Bearer )。
Azure DevOps组织是AAD支持的,因此我尝试使用Azure AD /token端点提供的访问令牌访问Azure DevOps API。
我使用PKCE中的授权代码流来获得令牌。
但是,在访问Azure DevOps API时,我经常会看到有关错误范围的错误消息。
The scope is invalid
通过curl呼叫,我看到了以下内容:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="https://spsprodcus2.vssps.visualstudio.com/_signin?realm=dev.azure.com&reply_to=https%3A%2F%2Fdev.azure.com%2FXXXXXXX%2FXXXXX%2F_apis%2Fwit%2Fworkitems%3Fids%3D11016%252C54321%26api-version%3D6.0&redirect=1&hid=1b2cef85-XXXX-XXXX-XXXX-8b6420bc5933&context=eyJodCI6XXXXXXXXXXXXLCJjcyI6IiJ90#ctx=eyJTaWduSW5XXXXXXW5lLmNvbSJdfQ2">here</a>.</h2>
</body></html>
当然,我的AAD注册应用程序添加了Azure DevOps API权限:
我尝试了另一种选择--从Azure获得令牌--在这里创建了一个基于https://aex.dev.azure.com/app/register的应用程序注册:,但随后显示了以下错误:
The corresponding application isn't registered within the Azure AD tenant.
不过,我发现在Azure DevOps门户注册的应用程序没有显示在Azure应用程序列表中。
因此,我开始认为,对于Azure DevOps,使用PKCE的授权代码流应该是不同的(就API调用而言),或者是Azure AD应用程序有问题(例如作用域或API权限)。
发布于 2022-10-17 10:31:30
我尝试在我的环境中复制相同的内容,并成功地获得了如下结果:
要访问Azure DevOps,请确保创建Azure AD应用程序,并添加同意的权限如下:
使用以下端点为授权code
流生成code+PKCE:
确保将499b84ac-1321-427f-aa17-267ca6975798/user_impersonation
使用作用域
GET
https://login.microsoftonline.com/TenantId/oauth2/v2.0/authorize?
response_type=code
&client_id=ClientID
&scope=499b84ac-1321-427f-aa17-267ca6975798/user_impersonation
&redirect_uri=RedirectUro
&code_challenge=CodeChallenge
&code_challenge_method=S256
当您到达上述端点时,将生成代码,如下所示:
要生成令牌,请使用以下参数:
GET
https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
client_id:client_id
grant_type:authorization_code
code:codegeneratedabove
redirect_uri:redirect_uri
code_verifier:S256
scope:499b84ac-1321-427f-aa17-267ca6975798/user_impersonation
client_secret:client_secret
响应:
要访问Azure DevOps,请使用上面生成的访问令牌。
我能够成功地获得Azure DevOps帐户的详细信息,如下所示:
GET https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=6.0
根据您的需求,您可以从标记中从Azure DevOps获取详细信息。
https://stackoverflow.com/questions/74080759
复制相似问题