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

 

欢迎进入【系统架构师】群

点击这里加入此群

posted @ 2011-12-02 22:45  白菜89  阅读(2158)  评论(12编辑  收藏  举报