![](/img/trans.png)
[英]How to implement claims-based authentication using Identity 2.0 in Asp.net MVC
[英]Implementing Claims based authentication in ASP.NET WebApi using VS 2013 and ADFS 2.0
我最近在Visual Studio 2013中構建了一個基於asp.net mvc 5的應用程序,該應用程序通過與我們的ADFS服務器進行交互來使用基於聲明的身份驗證。 我們使用ADFS 2.0,服務器操作系統為Windows 2008 R2。 我遵循了本教程: http : //www.cloudidentity.com/blog/2014/02/12/use-the-on-premises-organizational-authentication-option-adfs-with-asp-net-in-visual-studio -2013 /並按我的期望運行了該應用程序。 現在,我負責構建基於聲明的asp.net Web API服務,該服務將由公司的某些Intranet應用程序使用。 我以為我會按照類似的步驟來完成這項工作。 但是,當我選擇Web API選項,然后選擇“身份驗證”->“組織帳戶”->“ 本地 ”時,它會提到“ 需要Windows Server 2012 R2或更高版本中的ADFS”,實質上意味着需要ADFS 3.0。 在構建MVC應用程序時,這不是必需的。 我嘗試指定ADFS 2.0聯合身份驗證元數據URL,但運行應用程序時出現錯誤。 我可以使用ADFS 2.0並使用Visual Studio 2013構建Web api服務嗎?
這是我過去的做法。 如果有人有更好的主意,我願意接受建設性的批評。
首先,將以下NuGet包添加到您的WebAPI項目:
ValidatingIssuerNameRegistry
接下來,在/App_Start/Startup.Auth.cs中注釋掉ConfigureAuth方法的主體
public void ConfigureAuth(IAppBuilder app)
{
////app.UseActiveDirectoryFederationServicesBearerAuthentication(
//// new ActiveDirectoryFederationServicesBearerAuthenticationOptions
//// {
//// Audience = ConfigurationManager.AppSettings["ida:Audience"],
//// MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"]
//// });
}
接下來,將以下配置部分添加到web.config的頂部:
<configuration>
<configSections>
<section name="system.identityModel"
type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<!-- The rest of your config goes here -->
</configuration>
然后,添加以下應用程序配置值(您可能還希望刪除所有以“ ida:”開頭的鍵的現有條目)
<appSettings>
<add key="ida:FederationMetadataLocation" value="https://adfs.yourdomain.com/FederationMetadata/2007-06/FederationMetadata.xml" />
<add key="ida:Issuer" value="https://adfs.yourdomain.com/adfs/ls/" />
<add key="ida:ProviderSelection" value="productionSTS" />
</appSettings>
然后,添加以下system.web值:
<system.web>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="None" />
</system.web>
最后,將以下內容添加到配置文件的末尾:
<system.identityModel>
<identityConfiguration>
<audienceUris>
<add value="https://localhost:44444/" />
</audienceUris>
<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
<authority name="http://adfs.yourdomain.com/adfs/services/trust">
<keys>
<add thumbprint="1234567890123456789012345678901234567890" />
</keys>
<validIssuers>
<add name="http://adfs.yourdomain.com/adfs/services/trust" />
</validIssuers>
</authority>
</issuerNameRegistry>
<!-- if chain trust doesn't work, look at the other options for this value -->
<certificateValidation certificateValidationMode="ChainTrust" />
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="true" />
<wsFederation passiveRedirectEnabled="true" issuer="https://adfs.yourdomain.com/adfs/ls/" realm="https://localhost:44444/" requireHttps="true" />
</federationConfiguration>
</system.identityModel.services>
上面有一些占位符值,例如http://localhost:44444/
和adfs.yourdomain.com
,您需要提供適合組織的值。
希望這可以幫助。
更新:
我忘記了模塊:
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="WebDavModule" />
<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>
您可能需要向項目添加對System.IdentityModel和System.IdentityModel.Services的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.