私はMVC3サイトを持っており、一部のコントローラー/アクションにはWindows認証が必要ですが、他のコントローラー/アクションには必要ありません。つまり、匿名です。
サイトはしばらくの間正常に動作し、匿名アクションと認証済みアクションの両方にアクセスできます(プロンプトなしで、資格情報はChrome / IE / Firefoxで自動的に渡されます)が、認証が機能しなくなり、認証されていない資格情報の入力を求められ始めます受け入れられました。
サーバー全体を再起動するか、サイトの物理パスを別のアプリに変更し、認証されたリクエストを行う必要があります。これは、元のサイトに戻ったときに機能します。その後、すすぎと繰り返しの状況ですが、パターンが見つかりません。何もしなければ、認証は壊れたままになります。
IIS7.5を次のように構成しています。
アプリプール
- .NETFrameworkバージョン-v4.0
- マネージドパイプラインモード-統合
- アプリケーションプールID-ApplicationPoolIdentity
サイト
- 匿名認証-有効
- 匿名ユーザーID-IUSR[これがデフォルトだと思います]
- ASP.NETのなりすまし-無効
- フォーム認証-無効
- Windows認証-有効
- Windows認証拡張保護-オフ
- Windows認証カーネルモード認証を有効にする-オン
- Windows認証プロバイダー-ネゴシエート、NTLM
コントローラー
// Anonymous Controller
public class HomeController : Controller
{
public ActionResult Index()
{
return this.View();
}
}
// Authenticated Controller
[Authorize]
public class AnotherController : Controller
{
public ActionResult Index()
{
var viewModel = // create view model;
return this.View(viewModel);
}
}
常に、認証が機能しているかどうかにかかわらず、GET to / home/indexは200を返します。期待どおりです。認証が機能している場合、/ another/indexへのGETリクエストは次のようになります。
> GET /another/index
Response: 401
Response Headers: WWW-Authenticate: NTLM, WWW-Authenticate:Negotiate
> GET /another/index
Request Header: Authorization: Negotiate TlRMIVNDUAACAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
Response: 401
Response Header: WWW-Authenticate: Negotiate TlRMTVNTUAACAAAACAAEADgAAAAVgoni2YSlwIHmCL4AAAAAAAAAAIgAiAA8AAAABgGxHQAAAA9GAFIAAgAEAEYAUgABABQARgBSAEkATgBUAFIAQQBOAEUAVAAEABQARgBSAC5ATgBEAFMALgBjAG8AbQADACoARgBSAKkATgBUAFIAQQBUAEUAVAAuAGCAcgAuAG4AZACzAC4AYvBvAG0ABQAOAE4ARABTAC6AYwBvAG0ABwAIAOST3lPK980BAAAAAA==
> GET /another/index
Request Headers: Authorization: Negotiate TlRMTVNTUAACAAAACAAEADgAAAAVgoni2YSlwIHmCL4AAAAAAAAAAIgAiAA8AAAABgGxHQAAAA9GAFIAAgAEAEYAUgABABQARgBSAEkATgBUAFIAQQBOAEUAVAAEABQARgBSAC5ATgBEAFMALgBjAG8AbQADACoARgBSAKkATgBUAFIAQQBUAEUAVAAuAGCAcgAuAG4AZACzAC4AYvBvAG0ABQAOAE4ARABTAC6AYwBvAG0ABwAIAOST3lPK980BAAAAAA==
Response: 200
認証が中断されると、/ another/indexへのGETリクエストは次のようになります。
> GET /another/index
Response: 401
Response Headers: WWW-Authenticate: NTLM, WWW-Authenticate:Negotiate
> GET /another/index
Request Header: Authorization: Negotiate TlRMIVNDUAACAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
Response: 401
Response Headers: WWW-Authenticate: NTLM, WWW-Authenticate:Negotiate
この時点で、入力した資格情報の入力を求められます。同じ要求で、応答が再送されます。
> GET /another/index
Request Header: Authorization: Negotiate TlRMIVNDUAACAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
Response: 401
Response Headers: WWW-Authenticate: NTLM, WWW-Authenticate:Negotiate
何かが正しく構成されていないかどうか(私はそれが機能しないか、まったく機能しないと確信しています)、認証が失敗する理由、またはそれを停止する方法を誰かが知っていますか?
どうもありがとうございました。