使用WIF实现单点登录Part II —— Windows Identity F( 三 )


3、IP 处理该请求;如果请求合乎要求,它去获取需要的声明值,以安全令牌的形式发送回给主体 。
4、主体从IP那接收到安全令牌,并将它连同最开始的请求一起发送给RP程序 。
5、RP 程序检查传入的令牌并验证它是否符合所有的要求(是否从受信任的IP来的,格式是否正确,是否被篡改过,是否包含正确的声明集,等等) 。如果所有东西都合乎要求,RP就准许主体进行访问 。
好,了解了基于声明的身份标识基本流程之后,我们再来看看WIF是如何工作的 。

使用WIF实现单点登录Part II —— Windows Identity F

文章插图
上图演示了WIF为ASP.NET程序处理身份验证的简要过程 。
1、WIF坐镇应用程序的前端,位于ASP.NET管线中,当未验证通过的用户请求页面时,WIF将浏览器跳转到标识提供(IP)页面 。
2、这里IP对用户进行身份验证,不管用什么方法(可能显示一个用户民和密码的页面,可能用,或者其它方法) 。然后生成一个令牌,与所需的声明一起发送回去 。
3、浏览器将从IP那里得到的令牌post给应用程序,WIF再次截获该请求 。
4、如果令牌满足应用程序的要求(也就是,来自于正确的IP,包含正确的声明,等等),用户就被认为是验证通过了 。WIF然后放置一个,并建立起一个会话 。
5、传入的令牌里的声明在程序里用代码就可以对其进行使用了,此时控制权将交给应用程序 。
只要会话有效,随后的请求就不需要再走一遍这个流程,因为用户已经被认为是通过了身份验证了 。
WIF用到的协议时WS-协议,主要有两个HTTP模块来处理这些事情:(WSFAM)和。
在应用程序中使用WIF归结为以下三点:
使用WIF实现单点登录Part II —— Windows Identity F

文章插图
1、配置应用程序以使WIF的HTTP模块坐镇ASP.NET管线的前端 。
2、配置WIF模块以使它们引用目标IP,使用正确的协议,保护应用程序的计划资源,以及执行所需的应用程序策略 。
3、在需要应用程序逻辑的时候,从应用程序里访问声明的值,在需要用户标识属性的场合对其进行处理 。

WIF提供了两个和的扩展:分别是 和 ,它们是用来在WIF管线里处理声明的 。它们的实例存在于ASP.NET程序里的..User属性中 。你可以像平常的和编程模型那样来使用它们,或者把它们转换成正确的实例并利用其新的功能 。
定义如下:
public interface IClaimsPrincipal : IPrincipal{ // ... // Properties ClaimsIdentityCollection Identities { get; }}
由于是的一个扩展,所有的通常功能(如)都是支持的 。
唯一值得注意的地方是集合,实际上是一组的值 。来看看的定义:
public interface IClaimsIdentity : IIdentity { // ...ClaimCollection Claims { get; } }
这里我省去了这个接口的大部分成员,只留了这个最重要的,也就是与当前用户相关的一组声明 。那么声明是长什么样的呢:
public class Claim{ // ... // Properties public virtual string ClaimType { get; } public virtual string Issuer { get; }public virtual IClaimsIdentity Subject { get; }public virtual string Value { get; } }
我这里再次省去了其它成员 。列出来的这些属性基本看名字就知道是干什么用的了:
■表示声明的类型:出生日期,角色,和组成员资格,这些都是很好的例子 。WIF带有很多代表声明类型名称的常量;然而,如果需要的话,你可以很容易地定义自己的类型 。典型的声明类型是以URI来表示 。