我有一個MVC 3站點,其中一些控制器/操作需要Windows身份驗證,其他不需要,即匿名。IIS 7.5 Windows +匿名身份驗證間歇性地工作
該網站運行良好一段時間,我可以訪問匿名操作和經過身份驗證的操作(無需提示,憑證會在Chrome/IE/FireFox中自動傳遞),但隨後身份驗證停止工作,我開始收到提示永遠不會被接受的憑證。
我必須重新啓動整個服務器,或將站點物理路徑更改爲另一個應用程序,並在返回到原始站點時進行已驗證的請求,該請求可以正常工作。然後沖洗並重復這種情況,但我找不到任何模式。如果我什麼都不做,身份驗證就會中斷。
我有IIS 7.5的配置如下:
應用程序池
- .NET Framework版本 - V4.0
- 託管管道模式 - 集成
- 應用程序池標識 - ApplicationPoolIdentity
Site
- 匿名身份驗證 - 啓用
- 匿名用戶身份 - 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到/ home /索引完全按預期返回200。 當認證工作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
當認證打破了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
有誰知道,如果我有一些配置錯誤(我確信我不或者我不會指望它能夠工作),爲什麼認證中斷或者我可以如何阻止它?
非常感謝所有。