本文将讲解如何让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令牌签名证书的指纹,按如下步骤找到正确的证书指纹即可。

实战:ADFS3.0单点登录系列-集成MVC的更多相关文章

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

    这是本系列第四篇了,终于轮到SharePoint上场了,但是本文不会过多讲解SharePoint安装等话题,而是直入主题,讲解如何进行配置,让其于ADFS配合完成SSO的工作. 注意:本文使用的Sha ...

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

    本文将介绍如何将Exchange与ADFS集成,从而实现对于Exchange的SSO. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0 ...

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

    本系列将以一个实际项目为背景,介绍如何使用ADFS3.0实现SSO.其中包括SharePoint,MVC,Exchange等应用程序的SSO集成. 整个系列将会由如下几个部分构成: 实战:ADFS3. ...

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

    本文为本系列第二篇,主要分为两部分进行介绍, 一.网络拓扑 二.证书制作 还是将本系列目录贴出来,方便导航 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:A ...

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

    本文为系列第三章,主要讲下ADFS3.0的安装和配置.本文和前面的文章是一个系列,因此有些地方是有前后关联,比如本文中使用的通配符证书就是第二篇讲解的,因此需要连贯的进行阅读. 全文目录如下: 实战: ...

  6. cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)

    转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标:    ...

  7. Office 365实现单点登录系列(1)—域环境搭建

    Hello 小伙伴们, 2018新年快乐,作为2018年首篇文章,怎么能不给大家带来点干货呢?这篇文章其实我9月底的时候已经在MSDN上发布过了,为表诚意,我更新了这篇文章,并把它组成了一个系列,2. ...

  8. SSO单点登录系列4:cas-server登录页面自定义修改过程(jsp页面修改)

    落雨 cas 单点登录 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标:    下面是正文: 打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一 ...

  9. 2、cas4.0 单点登录 之 cas-client

    cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书已经做好了证书的准备工作.如今结合cas-server来配置单点登录: 一.安装cas服务端(cas-ser ...

随机推荐

  1. java File基本操作,以及递归遍历文件夹

    java 的文件操作,相对来说是比较重要的,无论是编写CS还是BS程序,都避免不了要与文件打交道,例如读写配置文件等.虽然现在很多框架都直接帮你做好了这一步! java.io.File 底层是调用与c ...

  2. ZOJ 3939 The Lucky Week (暴力找规律)

    题意:给定一个幸运日,求第 k 个幸运日是多少. 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力. 代码如下: #pragma comme ...

  3. raspberry是个什么玩意

    今天Wilson同学取回一个书本大小的包裹,说买回来一台小电脑,只有信用卡大小! 这是第一次听说和看见raspberry Pi. 一块开发板上有四个USB.一个视频接口.一个音频接口.一个网线接口和电 ...

  4. Android运行时Crash自动恢复框架-Recovery

    转自:http://zhengxiaoyong.me/2016/09/05/Android%E8%BF%90%E8%A1%8C%E6%97%B6Crash%E8%87%AA%E5%8A%A8%E6%8 ...

  5. CODING 告诉你硅谷项目经理的项目管理之道(2)

    优秀的项目管理者是怎么工作的?如何帮助研发团队高效工作?这一直是 CODING 关注的重要话题,我们不断地打磨 CODING 研发管理系统来让开发更简单. 近期我们精心挑选了几篇硅谷科技公司研发管理者 ...

  6. Cogs 1264. [NOIP2012] 开车旅行(70分 暴力)

    1264. [NOIP2012] 开车旅行 ★★☆   输入文件:drive.in   输出文件:drive.out   简单对比时间限制:2 s   内存限制:128 MB [题目描述] 小A 和小 ...

  7. bzoj2502: 清理雪道(有源汇有上下界最小流)

    传送门 别说话,自己看,我不会->这里 我这里用的建图方法是先跑一次最大流,连上$(t,s,inf)$之后再跑一遍,然后答案就是之前连的那条边的反向边的流量 据说还有种方法是连上$(t,s,in ...

  8. (四)从输入URL到页面加载发生了什么

    一.从输入URL到页面加载发生了什么 1.在浏览器中输入URL 如:https://www.cnblogs.com/loveapple/ URL分成协议.地址.路径三部分 协议:http.https. ...

  9. 如何阻止<a>标签的页面跳转

    当页面中a标签不需要执行任何页面跳转行为时: 1.标签属性href,使其指向空或不返回任何内容 <a href="javascript:void(0);" >页面不跳转 ...

  10. Unity---UNet学习(2)----简单mmo游戏实现

    1.实现步骤 新建空物体Controller,添加Network Manager.HUD组件. 创建Player模型,添加Inentity组件. Player添加脚本控制移动,只有当为本地用户才执行. ...