步骤1:配置主机头。这应该不是必须,但是我配了。详见上一篇博客。

步骤结果:经测试用主机头的地址能访问。

步骤2:Add STS Reference:

其中Use an existing STS一步,输入ADFS的FederationMetadata.xml所在。这里需要注意输入机器名称和完整名称有轻微不同。例如:机器名为xxx,域名为abc,我这边的环境机器的完整名称应为:xxx.abc.loc。而在xxx这台机器上的证书是按照完整名称颁发的,所以输入机器名称和完整名称的区别是,输入机器名称然后下一步时会有警告,说证书和地址不符。

其他的步骤暂时都是按照最简单的来。

完毕后,结果是:

更改了web.config和增加了自身的FederationMetadata.xml文件。

步骤3:

在ADFS中增加信赖方

选择手动输入有关信赖方德数据。并启用对WS-Federation被动协议的支持。这里输入的url应为应用的url,即之前Add STS Reference时候指定的Application URI。

然后下一步的时候,这个url会自动作为信赖方标识符出现。注意!这里的标识符貌似是case sensitive的!也就是应和应用的audienceUris完全匹配(这个不是100%确定,忘了,反正是要和一个什么东西一致)

完毕。暂时可以不添加声明规则。

结果:增加了ADFS中的依赖方的配置。

步骤4:

测试。排查错误:

@Passive client: The X.509 certificate CN=Geneva Signing Certificate is not in the trusted people store

如果运行过程中出现了这个错误,那么恭喜,整个过程是正常的。说明已经成功从issuer方返回到了application方,只不过因为是测试环境的证书,所以不认。参考http://social.msdn.microsoft.com/Forums/en-SG/Geneva/thread/ca0be31e-ab2e-447f-8562-99ea9cbec86b 做更改。

上面的错误消除后,应该能够回到应用的代码了。但是,如果有代码类似于HttpContext.Current.User.Identity.Name,则会报NullReference的异常。明明认证通过,为什么会是null呢?断点看看,可以知道Identity已经是Microsoft.IdentityModel.Claims.ClaimsIdentity的类型,而其有一属性为:DefaultNameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"。而默认FedUtil工具生成的Claims会包括name和role,而这里是name,言下之意是ClaimsIdentity会根据name来确定Identity的name。

了解,行动:回到ADFS,添加一个转换传入声明,把Windows 账户名转成名称。

再来,搞定!

接下来应该差不多了。但如果测试的时候发现每次关闭browser再重新登陆都要log in的话,检查一下ADFS那个机器的adfs url的站点是否已经在IE的intranet站点中。没有的话,添加。

最基本的几个步骤。暂时记录一下,不然真的要忘了。

posted on 2011-03-18 18:45  追萝驴  阅读(1718)  评论(0编辑  收藏  举报