第 5 章 PicketLink 身份管理
5.1. 关于安全令牌服务(Security Token Service,STS)
安全令牌服务(Security Token Service,STS)生成和管理安全令牌。它不会发出专有类型的令牌。相反,它定义让可以多个令牌提供者插入的通用接口。因此,你可以配置它处理不同类型的令牌,只要每个令牌类型都有令牌提供者存在。它也指定安全令牌请求和响应消息的格式。
安全令牌请求消息指定下列信息:
- 请求的类型,如 Issue、Renew 等。
- 令牌的类型。
- 发行的令牌的生命周期。
- 关于请求这个令牌的服务提供者的信息。
- 用来加密生成的令牌的信息。
令牌请求消息在 SOAP 消息的主体里发送。所有和令牌请求相关的信息都包括在
RequestSecurityToken
元素里。这个示例请求包含两个其他的 WS-Trust 元素:RequestType
,它指定这个请求是一个 Issue 请求,而 TokenType
则指定要发出的令牌的类型。
下面是一个 WS-Trust 安全令牌请求消息的例子。
例 5.1. WS-Trust 安全令牌请求消息
<S11:Envelope xmlns:S11=".." xmlns:wsu=".." xmlns:wst=".."> <S11:Header> ... </S11:Header> <S11:Body wsu:Id="body"> <wst:RequestSecurityToken Context="context"> <wst:TokenType>http://www.tokens.org/SpecialToken</wst:TokenType> <wst:RequestType> http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue </wst:RequestType> </wst:RequestSecurityToken> </S11:Body> </S11:Envelope>
下面是一个安全令牌响应的例子。
例 5.2. 安全令牌响应消息
<wst:RequestSecurityTokenResponse Context="context" xmlns:wst=".." xmlns:wsu=".."> <wst:TokenType>http://www.tokens.org/SpecialToken</wst:TokenType> <wst:RequestedSecurityToken> <token:SpecialToken xmlns:token="..."> ARhjefhE2FEjneovi&@FHfeoveq3 </token:SpecialToken> </wst:RequestedSecurityToken> <wst:Lifetime> <wsu:Created>...</wsu:Created> <wsu:Expires>...</wsu:Expires> </wst:Lifetime> </wst:RequestSecurityTokenResponse>
在这个安全令牌响应的例子里,
TokenType
元素指定发出的令牌的类型,而 RequestedSecurityToken
元素包含令牌自身。令牌的格式依赖于令牌的类型。Lifetime
元素指定令牌何时创建和过期。
安全令牌请求的处理
下面是安全令牌请求被处理的步骤:
- 客户发送一个安全令牌请求到
PicketLinkSTS
。
PicketLinkSTS
解析请求消息,生成 JAXB 对象模型。
PicketLinkSTS
读取配置文件并在需要时创建STSConfiguration
对象。然后它会从配置里获得WSTrustRequestHandler
的引用并将请求处理委托给处理程序实例。
- 请求处理程序在需要时(例如,当请求没有指定令牌的生命周期值)使用
STSConfiguration
来设置默认的值。
WSTrustRequestHandler
创建了WSTrustRequestContext
,设置JAXB
请求对象和从PicketLinkSTS
接收到的调用者主体。
WSTrustRequestHandler
使用STSConfiguration
来获取必须用来处理基于被请求的令牌的类型的SecurityTokenProvider
。然后,它再调用提供者,将构建的WSTrustRequestContext
作为参数传入。
SecurityTokenProvider
实例处理令牌请求并在请求上下文里存储发出的令牌。
WSTrustRequestHandler
从上下文获取令牌,如有需要则将其加密,然后构建包含安全令牌的 WS-Trust 响应对象。
PicketLinkSTS
决定请求处理程序生成的响应并将其返回给客户。