繁体   English   中英

在Azure Devops Rest API中授权

[英]Authorizing in azure devops rest API

我使用azure devops api进行统计,但是发送标头时无法在c#中进行身份验证。

我使用webrequests。

经过一堆测试后,我去了邮递员对其进行测试,我可以使用用户名和密码进入,所以我复制了授权头饰,因为我确实从服务器取回了信息,所以这种授权头是100%有效的。

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            httpWebRequest.Method = "GET";

            httpWebRequest.Headers.Add("Authorization:Basic base64Username:password");
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
                Console.WriteLine(result);
            }

在C#中,所有即时通讯都会得到响应,这是一堆完整的html类型代码,我猜这是身份验证网站的一部分

返回大量HTML的事实表明您没有以正确的方式形成基本的auth标头,或者无法识别您提供的用户名。 从代码示例中还不清楚这是什么,但是如果您提供的格式正确的auth头具有无效的凭据,则会收到401 Unauthorized响应, HttpWebRequest类将其作为异常抛出。

检查两件事:

  • 确保您正确地形成了auth标头(这几乎可以肯定,从您的问题中尚不清楚您是如何从邮递员复制它或尝试在C#中生成它的)

  • 确保您的凭据有效。

我已将您的代码段调整为明确有关正确形成标头的内容:

var base64Creds = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:password"));

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = "GET";

httpWebRequest.Headers.Add($"Authorization: Basic {base64Creds}");

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();

    Console.WriteLine(result);
}

如果以上代码段不适用于您的主要用户名和密码,则作为最后的选择,您可以尝试设置备用凭据:( https://dev.azure.com/ {organisation} / _ usersSettings / altcreds)用户名和密码组合,看看是否适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM