我试图得到一个简单的API样本项目的工作。什么都不起作用,因为我总是得到同样的错误:TF 400813:未授权用户“b370 c683-bb 42 - 626 c-9a 85-ec 3a 81 c32 fbf”访问此资源。",
我能够从www.example.com获得令牌micrsoftonline.com,但我猜这可能是Azure门户或Azure Devops中的设置问题。所有的文档都是100%无用的,因为来自https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-7.1的每一个文档都有4年前的样本!它们都不起作用,并且有几个演练相互冲突。我一直在尝试将服务主体链接到azure应用程序注册。我以为我已经做到了,但是每次我运行示例代码,或者尝试postman,每次都是同样的错误。
我在Postman中使用以下代码:
获取请求如下:
https://dev.azure.com/{Organization}/_apis/projects?api-version=7.0
虽然,我几乎从来没有使用过Rest API,所以这可能是不正确的,但总是得到相同的错误:
示例代码来自这里:https://github.com/microsoft/azure-devops-dotnet-samples
4年前,哈哈,可能过时了哦,顺便说一下,我正在使用Azure 30天试用版,并且刚刚注册了Azure DevOps。但没有提到任何限制。使用azure作为一个应用程序注册点来自动化azure devops中的任务不会这么难吧?
你知道可能出了什么问题吗?
谢谢你。
3条答案
按热度按时间e5njpo681#
我通过下载以下代码示例成功地让它工作起来:https://github.com/microsoft/azure-devops-auth-samples/tree/master/OAuthWebSample
这个项目中有一个自述文件,解释了在哪里以及如何注册你的azure devops应用程序。在这种情况下不需要Azure Portal。
代码中有一个错误,但是,您需要将index.cshtml页面中的/oauth/requesttoken更改为/oauth/authorize
另外,您需要在项目中添加对System.Runtime.Serialization的引用,因为没有该引用可能无法编译。
另外,请确保只使用几个作用域进行测试,因为创建应用程序所使用的作用域必须与web. config中使用的作用域完全匹配。
您也可以按照以下文档手动进行调用:https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops#2-authorize-your-app,但这是一个多一点的工作。您需要手动创建REST调用。
另外,Azure和Azure devops有一个主要的缓存/传播问题,因为我让一切都完美地工作,或者我认为,但一直得到401错误。所以,半个小时后我回来了,什么也没做,效果很好。你可能会或可能不会遇到这个问题。
此外,当您调用rest API时,使用以下格式:GET https://dev.azure.com/{organization}/_apis/projects?api-version=7.0(这将获取组织中的所有项目作为示例。)有几个误导性的示例,如果您不是RESTMaven,这将是痛苦的。
xqnpmsa82#
看起来你正在使用不记名令牌,但根据文档,你应该使用PAT。
如何生成PAT here
您可以从此处了解有关身份验证here的更多信息
编辑1:正如上面评论中提到的,你也可以尝试将授权类型从基本改为承载。
编辑2:我们可以使用rest API使用oauth,就像在this文档中提到的那样。
按照this创建应用程序。
9cbw7uwe3#
或者,您也可以使用以下步骤从Azure AD获取bearer token,以调用DevOps API。
我注册了一个Azure AD应用程序并授予DevOps
API permission
如下:现在,我在应用中选择**
Web
平台添加了重定向URI**,如下所示:由于权限类型为Delegated,需要使用授权码流、交互流、用户名密码等Delegated流…用于生成访问令牌。
获取授权码,可在获取令牌前在浏览器中运行以下授权请求:
当我在浏览器中运行上述请求时,我在地址栏中成功得到**
code
**值,如下所示:我通过Postman使用授权码流成功生成了访问令牌,在下面的请求中包含了上面的代码:
回复:
当我用这个token调用DevOps API时,我成功地得到了组织中的项目列表,如下所示:
回复:
更新:
我克隆了这个**GitHub sample,通过在Public Client(移动的& desktop)**平台添加重定向URI注册了一个Azure AD应用程序,如下所示:
添加DevOpsAPI权限后,我修改了**
App.config
**文件值,包括clientId、tenantId和组织URL,如下所示:当我运行示例时,打开了一个新窗口以登录,如下所示:
登录成功后,我在控制台得到了项目列表的响应,如下所示: