1

Windows認証を使用して一部のWebサービスに対して認証を試みるasp.net mvc 4.0 Webアプリケーションがあります。iis7でホストされています

Web サービスは autodesk Vault 2011 Web サービスです。Vault ユーザー アカウントを使用するか、Windows ログインを使用できるログイン画面をユーザーに提示します。Vault Web サービスを介してログインし、Vault からデータをプルするなど、さまざまな Vault Web サービスを呼び出す Vault アカウントを使用しても問題はありません。ここに問題はありません

Windows 認証を使用してログインしようとすると、Web サービスにアクセスすると 401 エラーが発生します。

これはダブル ホップの問題である可能性があるため、サーバー管理者は Kerberos を有効にして、少なくとも可能性としてこれを排除できるようにします。ライブ環境では、サイトと Web サービスは異なるサーバー上にあります。

ただし、テスト用に仮想マシンのセットアップがあり、サイトと Web サービスは同じマシン上にありますが、それでも 401 問題が発生するため、最初に考えられていたダブル ホップの問題ではなく、iis 構成の問題である可能性があります。

次のことを試しましたが、成功しませんでした

次のコードを winauthservice に追加しました (呼び出しをオーバーライドできるように Web サービスをラップし、サービスをインスタンス化するファクトリ クラスを作成しました)。

this.UnsafeAuthenticatedConnectionSharing = true;

var credentialCache = new CredentialCache();

credentialCache.Add(new Uri(this.Url), "NTLM", new NetworkCredential(identity.Name, identity.Password.ConvertToUNSecureString(), identity.Name.Substring(0, identity.Name.IndexOf("\\", StringComparison.OrdinalIgnoreCase))));

this.Credentials = credentialCache;

NTLMの代わりにNegotiateでも試しました

レジストリでループバック チェックを無効にし、サーバー名とローカルホストを BackConnectionHostNames レジストリ エントリに追加しました。

IIS で Web サイトの匿名認証を無効にし、Windows 認証を有効にしました。Windows認証のプロバイダーで、ネゴシエートを削除し、これを行うことを推奨する投稿を見たので、NTLMを残しました。

web.config で認証を設定しましたmode = windows

私のIISログには次のものがあります

2013-09-25 09:11:05 fe80::9565:6102:fe2d:8f41%10 POST /AutodeskDM/Services/WinAuth/WinAuthService.asmx - 80 - fe80::9565:6102:fe2d:8f41%10 Mozilla/ 4.0+(互換;+MSIE+6.0;+MS+Web+サービス+クライアント+プロトコル+4.0.30319.296) 401 2 5 11572 2013-09-25 09:11:05 fe80::9565:6102:fe2d:8f41% 10 POST /AutodeskDM/Services/WinAuth/WinAuthService.asmx - 80 - fe80::9565:6102:fe2d:8f41%10 Mozilla/4.0+(互換;+MSIE+6.0;+MS+Web+サービス+クライアント+プロトコル+ 4.0.30319.296) 401 1 3221225581 10

問題が何であるかについてのアイデアが不足していますが、私の考えでは、テスト VM でこれを機能させることができれば、ライブ環境でもっとうまくいくかもしれません。

4

1 に答える 1

0

HttpWebRequestオブジェクトを使用しているときに認証がリダイレクトされても問題がありましたが、これが問題かどうかはわかりません。Fiddler2を使用したリダイレクトと認証の欠落に気付きました。

私がしなければならなかったことはPreAuthenticate = trueHttpWebRequestオブジェクトに設定することでした

HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(uri);
request.PreAuthenticate = true;
request.Credentials = new CredentialCache {{uri, "Basic", credentials}};

しかし、私が言ったように、これがあなたの状況に当てはまるかどうかはわかりません.

于 2013-09-25T10:58:10.387 に答える