• 实战:ADFS3.0单点登录系列-集成MVC


    本文将讲解如何让MVC应用程序与ADFS集成,完成认证的过程。

    目录:

    实战:ADFS3.0单点登录系列-总览

    实战:ADFS3.0单点登录系列-前置准备

    实战:ADFS3.0单点登录系列-ADFS3.0安装配置

    实战:ADFS3.0单点登录系列-集成SharePoint

    实战:ADFS3.0单点登录系列-集成MVC

    实战:ADFS3.0单点登录系列-集成Exchange

    实战:ADFS3.0单点登录系列-自定义ADFS样式

    实战:ADFS3.0单点登录系列-问题汇总

    一.配置ADFS

    步骤基本与上一篇相同,只是在添加转换声明规则向导的时候有细微差别,根据实际情况,声明映射有差别,我这里使用upn映射到名称。

    在MVC应用程序中,使用httpContext.User.Identity.Name可以获取登录人的信息,当然是xxx@domain.com的形式。关于如何添加其他信息的映射,例如真实姓名等,有需要在后续章节会介绍。

    二 MVC应用程序中的配置

    这里会介绍两种方式(我这里使用的VS2013),两种方法分别适用于不同的场景:

    方案一适用于新建的应用程序(前提是已经有了ADFS环境)

    方案二适用于已经存在的项目。

    方案一:自动感知方式

    1.打开VS,点击新建项目,并创建MVC应用程序

    2.依次点击更改身份验证->组织账户—>本地

    在本地颁发机构输入ADFS元数据地址,格式为:

    https://{ FQDN}/ FederationMetadata/2007-06/FederationMetadata.xml

    例如:https://sts.tt.com/FederationMetadata/2007-06/FederationMetadata.xml

    ,应用ID Uri可空,待正式部署时进行修改。

     点击保存之后,VS会自动将需要的配置(web.config)和DLL进行修改和加载。

    方案二:手动配置方案

    1.<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" /> 

    2.<appSettings>节点下增加配置项:

    <add key="ida:FederationMetadataLocation" value="https://sts(ADFS地址)/FederationMetadata/2007-06/FederationMetadata.xml" />

    <add key="ida:Realm" value="https://xxxxx/(应用程序地址)" />

    <add key="ida:AudienceUri" value="https://xxxxx/(应用程序地址)" /> 

    3.<system.web>节点下增加和修改配置项:

    <authentication mode="None" />

     <authorization>

        <deny users="?" />

      </authorization> 

    4.<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> 

    5.</configuration>之前增加配置节

    <system.identityModel>

        <identityConfiguration>

          <audienceUris>

            <add value="https://localhost:44300/" />

          </audienceUris>

          <securityTokenHandlers>

            <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

            <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

          </securityTokenHandlers>

          <certificateValidation certificateValidationMode="None" />

          <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">

            <authority name="http://ADFS/adfs/services/trust">

              <keys>

                <add thumbprint="6DBC99C8BFB07435495849EC538E8A54A5587963" />(这里的证书指纹为ADFS令牌签名证书的指纹)

              </keys>

              <validIssuers>

                <add name="http://ADFS/adfs/services/trust" />

              </validIssuers>

            </authority>

          </issuerNameRegistry>

        </identityConfiguration>

    </system.identityModel> 

    <system.identityModel.services>

        <federationConfiguration>

          <cookieHandler requireSsl="true" />

          <wsFederation passiveRedirectEnabled="true" issuer="https://ADFS/adfs/ls/" realm="https://xxx/" requireHttps="true" />

        </federationConfiguration>

      </system.identityModel.services>

    6.dll引用

    1)Web项目右键 添加引用 找到system.identityModel和system.identityMoel.services并选择确认

     

    2)Nugget方式添加System.IdentityModel.Tokens.ValidatingIssuerNameRegistry

    这样就手动完成了整个的配置过程。主要是对web.config进行修改的对dll的引用。

    注意事项:

    如果遇到这个错误:

    解决方案:

    在Global.asax中的 Application_Start()方法中增加如下代码:

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;

    意思是告诉MVC,使用的声明类型是 Name。

    如遇到如下错误:

     Cookie加解密错误,尝试使用ProtectedData API解密Cookie出现错误

    解决方案:

    这个错误是因为多个应用程序都使用了默认的cookieName,因此只需要将不同应用程序的cookiehandler配置节配置为不同的名称即可。

    如果遇到如下错误:

    解决方案:

    这个错误是由于未正确配置指纹导致的,需要使用的是ADFS令牌签名证书的指纹,按如下步骤找到正确的证书指纹即可。

  • 相关阅读:
    NS3系列—4———NS3中文教程5:Tweaking NS3
    NS3系列—3———NS3中文:4 概念描述
    NS3系列—2———NS3笔录
    NS3系列—1———NS3中文教程:3下载及编译软件
    How to speed my too-slow ssh login?
    Linux bridge
    使用 GDB 和 KVM 调试 Linux 内核与模块
    How To Set Up A Serial Port Between Two Virtual Machines In VirtualBox
    Linux内核调试环境搭建(基于ubuntu12.04)
    Android
  • 原文地址:https://www.cnblogs.com/hudun/p/5919630.html
Copyright © 2020-2023  润新知