IIS 7 /Windows2008でホストされているASP.NETMVC3WebアプリケーションがIIS/Windows2008でホストされている別のサーバーからWCFWebサービスにアクセスしているシナリオがあります。2つのサーバー間にKCDがセットアップされており、必要なものがあります。 SPNもセットアップされます。
これがIEで機能することを確認しました。NetMonを使用して、KCDがバックエンドで機能していることも確認しました。私のWebアプリはマシンアカウント(ネットワークサービス)で実行されており、SPNはこのマシンアカウントに応じて設定されています。問題は、WindowsとMac OS X(Lion)マシンの両方でSafariを使用すると、401Unauthorizedエラーが発生することです。
HTTPリクエストは、クライアント認証スキーム「ネゴシエート」では許可されていません。サーバーから受信した認証ヘッダーは「Negotiate、NTLM」でした。
NetMonを見ると、WCF Webサービスへの要求がNTLMにフォールバックしているため、失敗しています。
WindowsマシンとMacマシンの両方がドメインの一部であり、両方のマシンで同じWindowsクレデンシャルを使用していることに注意してください。
SafariがKerberos認証をサポートしていることは知っていますが、WebアプリからWCFサービスに委任するときに問題があるようです。それはSafariの問題ですか、それともWCFの問題ですか?
前もって感謝します!
アップデート:
MacのSafariで、最初にWebアプリケーションにアクセスすると、WiresharkとNetMonで、HTTP要求に沿って有効なKerberosトークンが渡されていることがわかります(401 Unauthorizedエラーは発生しません)。しかし、私のWebアプリケーションがバックエンドWebサービスにアクセスしようとすると、その特定のHTTP要求で、渡されるトークンがNTLMトークンになっていることがわかります。
セキュリティモードとしてTransportCredentialOnlyでbasicHttpBindingを使用しています-web.configで、バックエンドWebサービスのエンドポイントのSPN ID(バックエンドWebサービスサーバーのHTTP / FQDN)も指定しました。もちろん、Windows Authは、「カーネルモードの使用」がオンになっていて、両方のサイトのappHost.configでuseAppPoolCredentialsがtrueに設定されている両方のIISサイトで有効になっています。繰り返しますが、これはMac上のSafari専用であり、FirefoxとChromeはどちらも正常に動作しています。