我们正在将Windows 8.1应用程序移植到UWP,并且在发送单点登录的默认用户凭据时遇到问题。尽管在处理程序上设置了UseDefaultCredentials = true
,但似乎没有设置凭据。这个确切的代码在Windows 8.1中有效。
using (var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
// client._handle.Credentials is null
// This call fails authentication with a 401
// and Fiddler shows no attempt to pass authentication
var response = await client.GetStringAsync(new Uri(GlobalConfig.Config.BaseUri, "Presenter/SingleSignOn"));
...
}
如上所述,在调试中我可以看到client._handle.Credentials
是null
。
我还尝试设置System.Net.CredentialCache
的凭据,但这些凭据似乎返回空凭据,并且还会生成null
client._handle.Credentials
。
var handler = new HttpClientHandler() { Credentials = System.Net.CredentialCache.DefaultCredentials };
var handler = new HttpClientHandler() { Credentials = System.Net.CredentialCache.DefaultNetworkCredentials };
我已根据this answer仔细检查了我们声明的功能,看起来很好。我们宣布了能力:
我尝试过使用Windows.Web.HttpClient
,但它有同样的问题 - 它没有找到默认凭据,因此它会通过用户界面提示。我错过了一些明显的东西吗还是一些不明显的东西?
TL; DR - 我在HttpClient
请求中传递默认用户凭据时遇到问题。
编辑:我应该补充说,一般情况下认证工作正常。如果我明确传递用户名/密码,那么它可以工作。显然,这不是目标。