繁体   English   中英

使用VS 2013和ADFS 2.0在ASP.NET WebApi中实现基于声明的身份验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM