WIF(Windows Identity Foundation) 被动联合身份验证过程详解
前面几篇文章介绍了下微软标识库WIF的基本概念,WIF目前支持两种验证方案,一个是 asp.net的被动联合身份验证,二是WCF的身份验证,因为前者需要用到浏览器,所以采用了一些技巧去实现,根据这些技巧的行为微软定义为"被动的".
下面我用一个示例项目来讲解:
首先我作为客户访问 下面项目中的 Default页面,这个应用程序叫做 "信赖方应用程序(RP)",是声明感知的,这些概念可以去MSDN里面详细了解.
我用Opera浏览器来拦截请求,图中的工具可以按(shift+ctrl+i),首先需要在页面右击"编辑站点首选项",
1."脚本"选项卡里面去掉"允许使用javascript",
2.然后去掉在"网络"选项卡里面的"允许自动重定向",这是为了捕获http请求头必须的.
我们请求RP的defalut页面时,由于未经验证,RP在响应头里面设置了重定向,重定向到STS的default页面(这个页面是专门用来给RP传递令牌的),你可能会疑问,这个重定向的url里面的参数好奇怪,什么wa,wtrealm.. 其实这些是由Rp方的 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule拦截未验证的请求后生成的,
这些参数在 WSFederationConstants 类里面.
当转到STS的Default页面时,STS说:咦?你还没有通过我的验证哦,我不能给你令牌的,你得先让我验证下你的身份.这样STS又转向到他的表单验证登录页面... 折腾啊!!
Login.aspx页面已经返回了上面的HTML ,为了演示,没有任何漂亮的样式 ,也没做任何密码决断,只要用户名不为空就算通过了.我来提交下.
提交的时候顺便把这个cookie提交过去了,这是刚刚请求那个登录页面时设置了,表单验证必备的,你懂的.
提交后,我们就算通过表单验证了,通过后干了什么呢?这个页面有点不好捕获,这也是之前为什么我要禁用脚本的原因,否则一闪就过了.这个页面是刚刚STS default.aspx页面返回的,
因为他已经被表单验证通过了,这个页面其实就是返回一个自提交JS和一个XML
以下是上面页面的HTML ,技术很简单 ,很多人用过了
以下是这次POST的拦截信息
好吧我把上面的提交下吧,这是提交是 STS default.aspx 页面 向 RP的 default.aspx 页面提交
哈哈,当这个令牌传递给RP时,RP端的 Default.aspx页面终于出现了
顺便把那个令牌XML格式化出来贴上
好了 时间不早了 读者消化下,多谢支持 ,点击此处下载
MSDN对此过程的图示:
http://msdn.microsoft.com/zh-cn/library/ee517293.aspx
令牌采用的ws-trust行业标准协议,可支持java客户端
Project Tango ,Metro 的介绍
http://dev.21tx.com/2008/12/20/11343.html
欢迎进入【系统架构师】群