2016-11-22 8 views
1

問題が発生しましたNTLMの認証 asp.netで問題なく動作するサービスがありますが、今はasp.netコアでこのサービスを使用する必要があります。私は認可を通過できません。私はこのようなバインディングを構成ASP.NET CoreのNTLM認証WCFが動作しない

:次に

 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; 

は、その後、私は

---> System.ServiceModel.Securityにサービスを提供して取得するためのいくつかの要求を行う

 ClientCredentials.Windows.ClientCredential.UserName = service.Login; 
     ClientCredentials.Windows.ClientCredential.Password = service.Password; 

を追加しました.MessageSecurityException:クライアント認証スキーム 'Ntlm'でHTTP要求が不正です。サーバーから受信した 認証ヘッダーは「NTLM」でした。

私はシオマネキを開き、2つの要求(asp.netおよびコア)を比較した そして、私はAuthorizationヘッダの違いを見つけましたが、パスワードや設定ファイルに同じログイン。

ASP.NET:

認証:NTLM TlRMTVNTUAABAAAAB4I Y ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADwの==

コア:

認証:私は書くことを試みたNTLM TlRMTVNTUAABAAAAB4I I ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADwの==

Core Variantの代わりにasp.netのヘッダーを挿入するためのカスタム動作BeforeSendRequest()と同じですが、2番目のリクエストでは、クライアントはヘッダのコアバリエーションを再度送信し、NTLMについて同じメッセージを再度返します。

間違った場所で間違いを見つけようとしていますか?

+0

これは完全に間違っている可能性がありますが、大文字と小文字が区別されるようです。クライアント認証方式でHTTPリクエストが不正です! 'Ntlm' !!サーバから受信した認証ヘッダは!! 'NTLM' !! –

+0

私はそれについて考えましたが、間違ったパスワードを設定すると、たとえばasp.netで同じメッセージが表示されます – DreamEvil

答えて

1

この現象の原因がわかりました。 asp.netでは、私はドメインを設定しません。ログインとパスワードのみが動作し、動作します。 しかし、asp.coreではそれは私にとってはうまくいかず、私はDomainを追加しました。そして今はasp.coreでも動作します。

var credentials = new NetworkCredential() 
    { 
     UserName = service.Login, 
     Password = service.Password, 
     Domain = service.Domain; 
    }; 
関連する問題