在Azure Devops Rest API中授权

时间:2019-06-29 01:27:25

标签: c# azure-devops 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类型代码,我猜这是身份验证网站的一部分

1 个答案:

答案 0 :(得分:0)

返回大量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),其用户名已知,并且密码组合,看看是否适合您。