WIF应用与ADFS 2.0配置实战(续):实现SSO
2011-03-21 10:59
429 查看
上一篇已经建立了Application和ADFS之间的信任关系,单点登录就已经是水到渠成的事情了。接下来把原来的站点复制一份来测试一下:
1.新建站点,并在站点下指定了虚拟目录(应用程序 in IIS 7.5)到复制的那份代码
2.配置SSL。原来采用的证书不是带星号的,这里重新创建一个自签名的证书,采用*.xxx.com的名称。关于这个,可以看看这里:http://forums.iis.net/t/1117559.aspx
3.修改原来的站点关联的证书为新建的这个。改后发现原来是disable的主机头变成enable了。
4.新站点绑定到HTTPS,采用新证书,设置不同的主机头。
5.同样,在DNS中注册新的主机
6.这个时候尝试访问新站点,报了一个异常:
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[CryptographicException: 系统找不到指定的文件。] System.Security.Cryptography.ProtectedData.Protect(Byte[] userData, Byte[] optionalEntropy, DataProtectionScope scope) +681 Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +121
[InvalidOperationException: ID1074: 尝试使用 ProtectedData API 加密 Cookie 时发生了 CryptographicException (有关详细信息,请参阅内部异常)。如果正在使用 IIS 7.5,则这可能是应用程序池的 loadUserProfile 设置为 false 所致。] Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +1280740 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) +74 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(XmlWriter writer, SecurityToken token) +571 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(SessionSecurityToken sessionToken) +103 Microsoft.IdentityModel.Web.SessionAuthenticationModule.WriteSessionTokenToCookie(SessionSecurityToken sessionToken) +136 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request) +639 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +1099462 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171
这样的异常信息真的是非常的programmer friendly,它连怎么解决都告诉你了。照做,异常消失。
7.系统页面能呈现了,但是,咦,为什么从ADFS验证完毕后又跳转到原来的站点了?哦,当然啦,我们adfs还没配。所以首先:
修改应用的配置文件,改web.config中的audienceUris和wsFederation中的realm为新的地址。另外,还应该修改FederationMetadata.xml中的<Address>节点。不过既然我们adfs中采用的是手动配置,而没有读取这个文件,其实这个文件修改与否应该没什么关系。
然后去到ADFS,用同样的方式建立一个信赖方。
再试,正常了!
8.测试。先用域用户测试,没有问题。用本机账户登录(而非域用户),弹出域验证输入框后,输入用户名密码后要勾选保存用户名和密码,关闭浏览器后再打开并访问系统才不会再次弹出域验证输入框。
1.新建站点,并在站点下指定了虚拟目录(应用程序 in IIS 7.5)到复制的那份代码
2.配置SSL。原来采用的证书不是带星号的,这里重新创建一个自签名的证书,采用*.xxx.com的名称。关于这个,可以看看这里:http://forums.iis.net/t/1117559.aspx
3.修改原来的站点关联的证书为新建的这个。改后发现原来是disable的主机头变成enable了。
4.新站点绑定到HTTPS,采用新证书,设置不同的主机头。
5.同样,在DNS中注册新的主机
6.这个时候尝试访问新站点,报了一个异常:
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[CryptographicException: 系统找不到指定的文件。] System.Security.Cryptography.ProtectedData.Protect(Byte[] userData, Byte[] optionalEntropy, DataProtectionScope scope) +681 Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +121
[InvalidOperationException: ID1074: 尝试使用 ProtectedData API 加密 Cookie 时发生了 CryptographicException (有关详细信息,请参阅内部异常)。如果正在使用 IIS 7.5,则这可能是应用程序池的 loadUserProfile 设置为 false 所致。] Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +1280740 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) +74 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(XmlWriter writer, SecurityToken token) +571 Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(SessionSecurityToken sessionToken) +103 Microsoft.IdentityModel.Web.SessionAuthenticationModule.WriteSessionTokenToCookie(SessionSecurityToken sessionToken) +136 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request) +639 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +1099462 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171
这样的异常信息真的是非常的programmer friendly,它连怎么解决都告诉你了。照做,异常消失。
7.系统页面能呈现了,但是,咦,为什么从ADFS验证完毕后又跳转到原来的站点了?哦,当然啦,我们adfs还没配。所以首先:
修改应用的配置文件,改web.config中的audienceUris和wsFederation中的realm为新的地址。另外,还应该修改FederationMetadata.xml中的<Address>节点。不过既然我们adfs中采用的是手动配置,而没有读取这个文件,其实这个文件修改与否应该没什么关系。
然后去到ADFS,用同样的方式建立一个信赖方。
再试,正常了!
8.测试。先用域用户测试,没有问题。用本机账户登录(而非域用户),弹出域验证输入框后,输入用户名密码后要勾选保存用户名和密码,关闭浏览器后再打开并访问系统才不会再次弹出域验证输入框。
相关文章推荐
- WIF应用与ADFS 2.0配置实战
- SpringBoot 实战 (二) :web 综合应用(配置Servlet、Listener、Filter,Log)
- 基于Hadoop2.0、YARN技术的大数据高阶应用实战、
- vue2.0构建单页应用最佳实战 (一)
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列。开源啦!!!
- Spring2.0配置中的新标签应用
- Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块
- Android Fragment应用实战,使用碎片向ActivityGroup说再见(使用Fragment实现底部标签页效果)
- WF4.0实战(十二):ASP.NET MVC2.0结合WF4.0实现用户多步注册流程
- vue2.0构建单页应用最佳实战
- 【Spring实战】----Security4.1.3实现根据请求跳转不同登录页以及登录后根据权限跳转到不同页配置
- Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度
- ASP.NET 2.0轻松实现数据库应用开发
- 09(maven+SSH)网上商城项目实战之使用jersey实现应用服务器和图片服务器分离
- ZooKeeper实战应用之【统一配置管理】
- hibernate 联合主键应用及配置用xml方式实现
- zookeeper应用——集中配置管理系统的实现(只是设计,没有具体实现代码)
- ZooKeeper 笔记(3) 实战应用之【统一配置管理】
- Spring MVC + JPA + Hibernate + GlassFish V3 + MySQL 实现J2EE应用的常用配置模板详解
- struts2.0参数绑定和零配置实现