SecurityTokenService.GetOutputClaimsIdentity Método

Definição

Quando substituído em uma classe derivada, esse método retorna uma coleção de entidades de saída a serem incluídas no token emitido.

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

Parâmetros

principal
ClaimsPrincipal

Um ClaimsPrincipal que representa a identidade do solicitante do token.

request
RequestSecurityToken

Um RequestSecurityToken que representa a solicitação do token de segurança. Isso inclui a mensagem de solicitação, bem como outras informações relacionadas ao cliente, como o contexto de autorização.

scope
Scope

O Scope que contém informações sobre a terceira parte confiável associada à solicitação. Este é o objeto Scope que foi retornado pelo método GetScope(ClaimsPrincipal, RequestSecurityToken).

Retornos

Um ClaimsIdentity que contém a coleção de declarações que serão colocadas no token de segurança emitido.

Exemplos

O exemplo de código usado neste tópico é obtido do Custom Token exemplo. Este exemplo fornece classes personalizadas que permitem o processamento de SWT (Tokens Web Simples) e inclui uma implementação de um STS passivo capaz de servir um token SWT. Para obter um exemplo de como implementar um STS ativo, você pode ver o Federation Metadata exemplo. Para obter informações sobre esses exemplos e outros exemplos disponíveis para WIF e sobre onde baixá-los, consulte Índice de exemplo de código WIF. O código a seguir mostra como substituir o GetOutputClaimsIdentity método para retornar declarações para seu STS. Neste exemplo, a mensagem RST (Token de Segurança de Solicitação) é ignorada e uma coleção de declarações com base no usuário como autenticada no STS é retornada.

/// <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;
}

Comentários

O GetOutputClaimsIdentity método é chamado do pipeline de emissão de token, que é implementado pelo Issue método . Ele retorna um ClaimsIdentity que contém as declarações a serem incluídas no token de segurança emitido com base no solicitante do token (o principal parâmetro), o RST de entrada (o request parâmetro) e a terceira parte confiável para a qual o token se destina (o scope parâmetro). A lógica neste método se preocupa principalmente em responder às seguintes perguntas:

  • Quais tipos de declaração devem ser incluídos na resposta com base no RP para o qual se destina? Normalmente, isso é decidido por RP de listas de tipos de declaração necessários para cada RP ou por solicitação examinando a Claims propriedade da solicitação. No entanto, a lógica e os detalhes para determinar as declarações a serem incluídas na resposta estão completamente à sua implementação.

  • Quais valores de declaração devem ser atribuídos às declarações na resposta? Para um PROVEDOR de Identidade (IP-STS), isso normalmente significa usar uma ou mais declarações no solicitante ClaimsPrincipal (fornecido pelo principal parâmetro) para acessar um repositório (ou outra entidade) para retornar valores para os tipos de declaração necessários. Para um provedor de federação (R-STS), isso normalmente significa executar algum tipo de processamento nas declarações de entrada do solicitante para atender à solicitação; talvez executando filtragem ou transformação em algumas declarações apresentadas pelo solicitante, enquanto passa outras por meio de não modificado. É claro que, como no caso de decidir quais declarações incluir na resposta, os detalhes e a lógica de como determinar os valores dessas declarações cabem à sua implementação.

Notas aos Implementadores

Você deve substituir esse método em sua implementação da classe SecurityTokenService.

Aplica-se a

Confira também