如何使用从VSO API收到的身份验证令牌?

时间:2015-11-13 17:32:12

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

我编写了一个Node应用程序,允许我使用Visual Studio Team Services进行身份验证(使用Microsoft Account)。我知道我已成功登录我的组织帐户(即joe @ contoso.com ),因为我收到了访问令牌和个人资料信息,例如我的姓名和电子邮件地址。

当我尝试将访问令牌与对VSO的API调用一起使用时(使用承载令牌策略),我从服务收到401错误,并显示以下消息。

TF400813: The user 'Windows Live ID\00030000BE8767F8@Live.com'; is not authorized to access this resource.

似乎访问令牌中嵌入的帐户不是我登录的帐户,这非常令人困惑。有谁知道这里发生了什么?

FWIW,我正在尝试制作工作项查询请求。

3 个答案:

答案 0 :(得分:0)

我如何传递POST正文时出错。我不认为这应该导致401,但一旦我修复它,我的电话按预期工作。与VSO API无关。

答案 1 :(得分:0)

我意识到这是一个古老的主题,但对于那些从谷歌来到这里的人来说。 这取决于您在后续调用中如何为凭据设置访问令牌。

以下为我做了诀窍。

var connection = new VssConnection(new Uri("https://youraccountname.visualstudio.com"), new VssOAuthCredential("accessToken"));
var client = connection.GetClient<ProjectHttpClient>();
var projects = client.GetProjects().Result;

答案 2 :(得分:0)

韦斯利·范·海耶(Wesley van Heije)几乎是正确的(由于声誉不足,我无法评论他的回答)。在使用oauth2访问令牌的情况下对我有用的更新代码是:

VssOAuthAccessTokenCredential credentials = new VssOAuthAccessTokenCredential(AccessToken);
VssConnection connection = new VssConnection(new Uri("https://dev.azure.com/[your org]"), credentials);
var client = connection.GetClient<ProjectHttpClient>();
var projects = client.GetProjects().Result;

感谢here中的2号,因为它是在大海捞针中找到的。