实战:ADFS3.0单点登录系列-集成MVC
本文将讲解如何让MVC应用程序与ADFS集成,完成认证的过程。
目录:
实战: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的更多相关文章
- 实战:ADFS3.0单点登录系列-集成SharePoint
这是本系列第四篇了,终于轮到SharePoint上场了,但是本文不会过多讲解SharePoint安装等话题,而是直入主题,讲解如何进行配置,让其于ADFS配合完成SSO的工作. 注意:本文使用的Sha ...
- 实战:ADFS3.0单点登录系列-集成Exchange
本文将介绍如何将Exchange与ADFS集成,从而实现对于Exchange的SSO. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0 ...
- 实战:ADFS3.0单点登录系列-总览
本系列将以一个实际项目为背景,介绍如何使用ADFS3.0实现SSO.其中包括SharePoint,MVC,Exchange等应用程序的SSO集成. 整个系列将会由如下几个部分构成: 实战:ADFS3. ...
- 实战:ADFS3.0单点登录系列-前置准备
本文为本系列第二篇,主要分为两部分进行介绍, 一.网络拓扑 二.证书制作 还是将本系列目录贴出来,方便导航 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:A ...
- 实战:ADFS3.0单点登录系列-ADFS3.0安装配置
本文为系列第三章,主要讲下ADFS3.0的安装和配置.本文和前面的文章是一个系列,因此有些地方是有前后关联,比如本文中使用的通配符证书就是第二篇讲解的,因此需要连贯的进行阅读. 全文目录如下: 实战: ...
- cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)
转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: ...
- Office 365实现单点登录系列(1)—域环境搭建
Hello 小伙伴们, 2018新年快乐,作为2018年首篇文章,怎么能不给大家带来点干货呢?这篇文章其实我9月底的时候已经在MSDN上发布过了,为表诚意,我更新了这篇文章,并把它组成了一个系列,2. ...
- SSO单点登录系列4:cas-server登录页面自定义修改过程(jsp页面修改)
落雨 cas 单点登录 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: 下面是正文: 打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一 ...
- 2、cas4.0 单点登录 之 cas-client
cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书已经做好了证书的准备工作.如今结合cas-server来配置单点登录: 一.安装cas服务端(cas-ser ...
随机推荐
- 3. XML实体注入漏洞的利用与学习
XML实体注入漏洞的利用与学习 前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发 ...
- Ubuntu14跑DSO
按照https://github.com/JakobEngel/dso上的说明,make -j4的时候出现一下错误: /home/zhao/dso/src/FullSystem/CoarseIniti ...
- 网页DIV+CSS布局和动画美化全程实例 (陈益材) 随书光盘
网站的建站技术近几年得到迅速的发展,网页的布局与特效动画技术层出不穷,网站建设已经从简单的技术支持时代衍变到现在的视觉美化时代.但如何使设计的网页高人一筹,达到让人过目不忘的境界,如何追求以最简单的特 ...
- Django 之装饰器实现登录认证
def check_login(func): # 自定义登录验证装饰器 def warpper(request, *args, **kwargs): is_login = request.sessio ...
- Sharepoint2013商务智能学习笔记之简单概述(一)
SharePoint 2013 中的商业智能 (BI) 提供集 Microsoft Office 应用程序和其他 Microsoft 技术于一体的全面的 BI 工具.这些 BI 工具有:Excel 2 ...
- 浅谈.net的后台校验
1.场景描述 在开发中,前端的相关模型校验往往不能满足当前开发的需求,也就是并不是十分的安全.于是,很多情况下需要后端进行模型的校验.在.net mvc中,有很多校验的方式(比如:值(1)可以使用内置 ...
- Codeforces Round #523 (Div. 2)D(二分,多重集)
#include<bits/stdc++.h>using namespace std;const long long N=1e5+5;const long long MOD=1e9+7;l ...
- 消耗战——dp+虚树
题目 [题目描述] 在一场战争中,战场由 $n$ 个岛屿和 $n-1$ 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为 $1$ 的岛屿,而且他们已经没有足够多 ...
- python基本数据类型练习
一.元素分类# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.# 即 ...
- excel无法复制
空字符(ascii 码 0,在程序里一般写作"\0"),在 vim 里就显示成 ^@. 如果在 vim 里遇到不确定的口字苻,可以在那个字符上按 ga(普通模式下宜接按,先 g 再 ...