C# 未经授权调用RESTful api时遇到问题?

C# 未经授权调用RESTful api时遇到问题?,c#,asp.net-mvc,rest,restful-authentication,C#,Asp.net Mvc,Rest,Restful Authentication,我需要在没有任何授权的情况下调用RESTful API。API使用自己的自定义授权。我可以利用Postman成功访问API,但是从我的应用程序调用完全相同的URL失败,结果是“访问被拒绝”。我能看到的唯一区别是邮递员被设置为“无身份验证” 以下是拨打电话的代码: var task = client.GetAsync(url) .ContinueWith((taskwithresponse) => { var response = ta

我需要在没有任何授权的情况下调用RESTful API。API使用自己的自定义授权。我可以利用Postman成功访问API,但是从我的应用程序调用完全相同的URL失败,结果是“访问被拒绝”。我能看到的唯一区别是邮递员被设置为“无身份验证”

以下是拨打电话的代码:

var task = client.GetAsync(url)
        .ContinueWith((taskwithresponse) =>
        {
            var response = taskwithresponse.Result;
            var jsonString = response.Content.ReadAsStringAsync();
            jsonString.Wait();
            var model = JsonConvert.DeserializeObject<object>(jsonString.Result).ToString();

        });
        task.Wait();

邮递员未发送任何邮件头。

看起来rest服务正在使用NTLM或Kerberos安全令牌进行身份验证。邮递员正在自动发送windows标识的信息。通过C#代码,您必须明确指定Windows标识作为模拟的标识令牌

尝试
WebClient
而不是
HttpClient
并使用默认值:

var wi = (WindowsIdentity)HttpContext.User.Identity;

var wic = wi.Impersonate();

 using (var client = new WebClient { UseDefaultCredentials = true })
    {
        client.DownloadStringAsync(url);
    }

wic.Undo();
如果
Async
不起作用,请尝试同步方法
DownloadString


有关更多详细信息,请参阅。

您使用的是HttpClient还是RestSharpClient?我使用的是HttpClientYou能否共享Postman提供的HTTP标头?我刚刚将标头添加到原始问题中。看起来您正在使用Kerberos对公司rest服务进行身份验证。您只需要在HttpClient上打开UseDefaultCredentials。注意,在prod中,服务还需要在授权使用此rest服务的服务帐户下运行。异步方法不起作用,但同步方法起作用。呜呼!这是因为线程安全上下文。当前线程知道在代码中完成的身份模拟,但新线程不知道。干杯
var wi = (WindowsIdentity)HttpContext.User.Identity;

var wic = wi.Impersonate();

 using (var client = new WebClient { UseDefaultCredentials = true })
    {
        client.DownloadStringAsync(url);
    }

wic.Undo();