SecurityTokenService.GetOutputClaimsIdentity 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当在派生类中重写时,此方法将返回要包括在颁发令牌中的输出主题的集合。
protected:
abstract System::Security::Claims::ClaimsIdentity ^ GetOutputClaimsIdentity(System::Security::Claims::ClaimsPrincipal ^ principal, System::IdentityModel::Protocols::WSTrust::RequestSecurityToken ^ request, System::IdentityModel::Scope ^ scope);
protected abstract System.Security.Claims.ClaimsIdentity GetOutputClaimsIdentity (System.Security.Claims.ClaimsPrincipal principal, System.IdentityModel.Protocols.WSTrust.RequestSecurityToken request, System.IdentityModel.Scope scope);
abstract member GetOutputClaimsIdentity : System.Security.Claims.ClaimsPrincipal * System.IdentityModel.Protocols.WSTrust.RequestSecurityToken * System.IdentityModel.Scope -> System.Security.Claims.ClaimsIdentity
Protected MustOverride Function GetOutputClaimsIdentity (principal As ClaimsPrincipal, request As RequestSecurityToken, scope As Scope) As ClaimsIdentity
参数
- principal
- ClaimsPrincipal
一个 ClaimsPrincipal,表示令牌请求者的标识。
- request
- RequestSecurityToken
一个 RequestSecurityToken,表示安全令牌请求。 这包括请求消息和其他客户端相关信息,如授权上下文。
- scope
- Scope
包含与请求相关的依赖放的信息的 Scope。 作为 Scope 方法的 GetScope(ClaimsPrincipal, RequestSecurityToken)参数返回的对象。
返回
ClaimsIdentity 包含放置在发布的安全标志上的声明的集合。
示例
本主题中使用的代码示例取自 Custom Token
示例。 此示例提供自定义类,这些类支持处理简单 Web 令牌 (SWT) ,并包含能够为 SWT 令牌提供服务的被动 STS 的实现。 有关如何实现活动 STS 的示例,请参阅示例 Federation Metadata
。 有关这些示例和可用于 WIF 的其他示例以及下载位置的信息,请参阅 WIF 代码示例索引。 以下代码演示如何重写 方法以 GetOutputClaimsIdentity 返回 STS 的声明。 在此示例中,将忽略请求安全令牌 (RST) 消息,并返回基于在 STS 进行身份验证的用户的声明集合。
/// <summary>
/// This method returns the content of the issued token. The content is represented as a set of
/// IClaimIdentity intances, each instance corresponds to a single issued token. Currently, the Windows Identity Foundation only
/// supports a single token issuance, so the returned collection must always contain only a single instance.
/// </summary>
/// <param name="scope">The scope that was previously returned by GetScope method</param>
/// <param name="principal">The caller's principal</param>
/// <param name="request">The incoming RST, we don't use this in our implementation</param>
/// <returns></returns>
protected override ClaimsIdentity GetOutputClaimsIdentity( ClaimsPrincipal principal, RequestSecurityToken request, Scope scope )
{
//
// Return a default claim set which contains a custom decision claim
// Here you can actually examine the user by looking at the IClaimsPrincipal and
// return the right decision based on that.
//
ClaimsIdentity outgoingIdentity = new ClaimsIdentity();
outgoingIdentity.AddClaims(principal.Claims);
return outgoingIdentity;
}
注解
方法 GetOutputClaimsIdentity 从令牌颁发管道调用,该管道由 Issue 方法实现。 它返回一个 , ClaimsIdentity 其中包含要包含在已颁发安全令牌中的声明,这些声明基于令牌的请求者 (principal
参数) 、传入的 RST (request
参数) ,以及令牌的信赖方 (scope
参数) 。 此方法中的逻辑主要涉及回答以下问题:
应根据预期的 RP 将哪些声明类型包含在响应中? 通常,这是根据每个 RP 所需的声明类型列表根据每个 RP 决定的,或通过检查 Claims 请求的 属性来根据每个请求决定的。 但是,用于确定要包含在响应中的声明的逻辑和详细信息完全由实现决定。
应将哪些声明值分配给响应中的声明? 对于标识提供者 (IP-STS) 这通常意味着在请求者的 ClaimsPrincipal (
principal
中使用参数提供的一个或多个声明,) 访问存储 (或其他实体) 返回所需声明类型的值。 对于联合提供程序 (R-STS) 这通常意味着对请求者的传入声明执行某种处理以满足请求;也许对请求者提供的某些声明执行筛选或转换,同时通过未修改的传递其他声明。 当然,与决定在响应中包括哪些声明一样,如何确定这些声明值的详细信息和逻辑由实现决定。
实施者说明
实现该 SecurityTokenService 类时,必须重写此方法。