WIF(Windows Identity Foundation) 被动联合身份验证过程详解
2011-12-02 22:45
183 查看
前面几篇文章介绍了下微软标识库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
欢迎进入【系统架构师】群
下面我用一个示例项目来讲解:
首先我作为客户访问 下面项目中的 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
欢迎进入【系统架构师】群
相关文章推荐
- WIF, Windows 身份验证基础
- 如何实现基于消息/传输安全验证机制下的windows身份验证过程、无任何验证
- WIF基本原理(4)联合身份验证实例
- ASP.NET 2.0 中的 Windows 身份验证详解
- 配置SQL Server 2005 Express的Windows和SQL Server身份验证
- Windows Azure Active Directory正式发布:已提供了超过 2650 亿个身份验证和服务了290万个组织!
- win7装sql server2008 windows身份验证无法登陆 错误:18456
- SQL Server之——使用windows身份验证,jdbc连接数据库
- 在调试asp.net程序时,提示windows窗体身份验证错误怎么办
- IIS 指定了身份验证方案“IntegratedWindowsAuthentication, Anonymous”,但绑定仅支持一种身份验证的规范。有效的身份验证方案为摘要、协商、NTLM、基本或匿名。解决方法
- Windows 集成的身份验证连接SQL Server
- 基于RODC的身份验证过程
- WCF分布式安全开发实践(4):传输安全模式之Windows身份验证:Transport_Windows_NetTcpBinding
- 在Windows和UNIX下利用PHP和LDAP进行身份验证
- ASP.Net 2.0 窗体身份验证机制详解
- 用户身份验证之Windows验证
- SQL Server windows身份验证和SQL Server身份验证的连接字符串
- Windows下Jekyll配置过程详解
- C# windows身份验证的连接字符串!