SecurityTokenService.GetOutputClaimsIdentity 方法

定义

当在派生类中重写时,此方法将返回要包括在颁发令牌中的输出主题的集合。

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 类时,必须重写此方法。

适用于

另请参阅