第 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决定请求处理程序生成的响应并将其返回给客户。