我正在開發一個應用程序的原型,我們計劃使用WIF 4.5在MVC5中構建應用程序,該應用程序將針對ADFS服務器進行身份驗證。到目前爲止,我的ADFS實現工作正常,但是存在一個要求,允許Intranet上的用戶被動地向某個控制器進行身份驗證,例如管理員控制器,而外部用戶將使用ADFS在主控制器上進行身份驗證。乍一看,我認爲這將是一個簡單的web.config設置,但是現在看起來情況並非如此。.NET MVC5 w/ADFS和Windows身份驗證
ADFS與應用程序不在同一個域中,但我希望Windows身份驗證發生在應用程序分開的域上。
我的問題是,A)這是可能的,還是我想做一些框架無意處理的事情? B)我怎樣才能做到這一點?
我試過的
<location path="Admin">
<system.web>
<!--Having this here throws an error-->
<authentication mode="Windows"></authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>`
<system.web>
<authentication mode="None|Federated|Windows" />
<authorization>
<deny users="?" />
</authorization>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />
</system.web>
幾個不同的組合看來,如果任何認證正在實施,它始終是ADFS。我使用On-Premises Organizational Authentication Option (ADFS) With ASP.NET in Visual Studio 2013開始使用模板,並使用管理員提供的元數據。因此,我的項目或多或少是一個關於該模板的香草實現,只需一點定製即可使用我從ADFS工作流獲得的用戶對象。
我得到的是當認證模式中的位置節點設置上面引用的錯誤是
它是使用註冊爲allowDefinition =應用程序級別之外「MachineToApplication」的節是錯誤的。此錯誤可能是由於虛擬目錄未被配置爲IIS中的應用程序。
我收集的內容涉及到沒有將我的虛擬目錄設置爲IIS中的應用程序,但這不是所需的結果。此外,當我確實試圖符合這個錯誤時,我仍然沒有認證正常工作。
稍微更詳細些,經過一些修補之後,我發現IISExpress設置(並最終IIS)將實際上需要設置哪些是好的。所以加入
<location path="WebApplication4/Admin">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
我對ApplicationHost.config也開始提示用戶名和密碼的瀏覽器,但我也發現,
<system.webServer>
<modules>
<add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
</modules>
</system.webServer>
似乎是什麼最終完全劫持我的身份驗證和強制所有內容都通過ADFS服務器。我可以手動調用ADFS身份驗證的方法,所以我想要做的就是告訴控制器不要使用它,而是使用Windows身份驗證。看起來,如果我只是簡單地評論這些模塊,但是它會破壞我的ADFS工作流程,但是它會在管理控制器上正確使用Windows身份驗證。
感謝您的回答,我想這可能就是這樣。我想我只需將內部應用程序拆分爲自己的應用程序並像這樣處理它。 – 2014-11-17 17:51:44
我不相信「您的應用程序只能擁有一種身份驗證方法」的說法屬實。看着這篇博客文章(我還沒有嘗試過)看起來像你可以混合使用ADFS和形式驗證,只要他們不在同一個位置(http://leastprivilege.com/2012/02/02/02/混合形式和令牌認證在單一的ASP網絡應用/) – Bil 2015-06-02 15:29:21
你是對的,你可以在某些方面與一些自定義代碼混合一些認證方案。 ASP.Net不提供這種靈活性,這就是我的意思。 @LazyCoder只想覆蓋位置標記中的「身份驗證」方案,這是不受支持的,您也可以使用不同的身份驗證方案放置web.config。 – 2015-08-25 08:54:21