我遇到 NTLM 授权问题
我有一个在asp.net上运行没有任何问题的服务,但现在我需要在asp.net core上使用这个服务,但我无法通过授权。
我这样配置绑定:
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
binding.OpenTimeout = binding.CloseTimeout =
binding.SendTimeout = binding.ReceiveTimeout = TimeSpan.FromMinutes(1);
binding.MaxReceivedMessageSize = 20971520;
binding.MaxBufferPoolSize = binding.MaxBufferSize = 20971520;
binding.ReaderQuotas.MaxArrayLength =
binding.ReaderQuotas.MaxStringContentLength =
binding.ReaderQuotas.MaxBytesPerRead =
binding.ReaderQuotas.MaxNameTableCharCount = 2097152;
binding.TextEncoding = Encoding.UTF8;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
//binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
binding.TransferMode = TransferMode.Buffered;
binding.AllowCookies = false;
然后添加
ClientCredentials.Windows.ClientCredential.UserName = service.Login;
ClientCredentials.Windows.ClientCredential.Password = service.Password;
然后我做了一些服务请求并得到
---> System.ServiceModel.Security.MessageSecurityException: HTTP 请求未经客户端身份验证方案“Ntlm”的授权。这
从服务器收到的身份验证标头是“NTLM”。
我打开 fiddler 并比较两个请求(asp.net 和 core)
我发现授权标头有所不同,但配置文件中的密码和登录名相同。
ASP.NET:
授权:NTLM TlRMTVNTUAABAAAAB4IYogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw==
Core :
授权:NTLM TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw==
我尝试编写自定义行为,以便将来自 asp.net 的标头而不是 BeforeSendRequest() 中的核心变体放入其中,但在第二个请求客户端中再次发送标头的核心变体,我再次收到有关 NTLM 的相同消息
我可能会尝试在错误的地方发现错误吗?
我发现了这种行为的原因。
在 asp.net 中,我没有设置域,只设置登录名和密码,它可以工作。
但在asp dotnet core中它对我不起作用,我添加了Domain。现在它也可以在 asp dotnet core 中运行。
var credentials = new NetworkCredential
{
UserName = service.Login,
Password = service.Password,
Domain = service.Domain
};
service.ClientCredentials.Windows.ClientCredential = credentials;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)