.Net Core WCF 客户端 - NTLM Auth - 401
.Net Core WCF Client - NTLM Auth - 401
我正在使用这篇文章将 SSRS WCF 客户端从 .Net Framework 迁移到 .Net Standard https://blogs.msdn.microsoft.com/dataaccesstechnologies/2017/09/19/reporting-services-web-services-with-net-core-2/
以前版本的客户端初始化如下所示:
var client = new ReportExecutionService
{
Url = url,
Credentials = new NetworkCredential(username, password, domain)
});
这是新版本的代码:
var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
var endpointAddress = new EndpointAddress(url);
var client = new ReportExecutionServiceSoapClient(basicHttpBinding, endpointAddress);
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(username, password, domain);
新客户端失败,出现 401 错误。我已经使用 Fiddler 检查了请求,两者都具有相似的身份验证令牌格式:
Authorization: NTLM long_base64_string
但价值不同。 NetworkCredential
使用相同的值进行初始化。不同令牌的原因可能是什么?有没有办法解码这些令牌以检查两种情况下实际发送的内容?常规 base64 解码给我一个以 NTLMSSP
开头的字符串,后跟一些二进制数据
最后通过设置AllowedImpersonationLevel
解决:
client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
我正在使用这篇文章将 SSRS WCF 客户端从 .Net Framework 迁移到 .Net Standard https://blogs.msdn.microsoft.com/dataaccesstechnologies/2017/09/19/reporting-services-web-services-with-net-core-2/
以前版本的客户端初始化如下所示:
var client = new ReportExecutionService
{
Url = url,
Credentials = new NetworkCredential(username, password, domain)
});
这是新版本的代码:
var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
var endpointAddress = new EndpointAddress(url);
var client = new ReportExecutionServiceSoapClient(basicHttpBinding, endpointAddress);
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(username, password, domain);
新客户端失败,出现 401 错误。我已经使用 Fiddler 检查了请求,两者都具有相似的身份验证令牌格式:
Authorization: NTLM long_base64_string
但价值不同。 NetworkCredential
使用相同的值进行初始化。不同令牌的原因可能是什么?有没有办法解码这些令牌以检查两种情况下实际发送的内容?常规 base64 解码给我一个以 NTLMSSP
开头的字符串,后跟一些二进制数据
最后通过设置AllowedImpersonationLevel
解决:
client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;