Como: configurar um emissor local

Este tópico descreve como configurar um cliente para usar um emissor local para tokens emitidos.

Geralmente, quando um cliente se comunica com um serviço federado, o serviço especifica o endereço do serviço de token de segurança que deverá emitir o token que o cliente usará para se autenticar no serviço federado. Em determinadas situações, o cliente pode ser configurado para usar um emissor local.

O WCF (Windows Communication Foundation) usa um emissor local nos casos em que o endereço do emissor de uma associação federada é http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous ou null. Nesses casos, você deve configurar ClientCredentials com o endereço do emissor local e a associação a ser usada para se comunicar com esse emissor.

Observação

Se a propriedade SupportInteractive da classe ClientCredentials estiver definida como true, um endereço do emissor local não for especificado e o endereço do emissor especificado pelo <wsFederationHttpBinding> ou outra associação federada for http://schemas.xmlsoap.org/ws/2005/05/identity/issuer/self, http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous ou null, o emissor do CardSpace do Windows será usado.

Para configurar o emissor local no código

  1. Criar uma variável do tipo IssuedTokenClientCredential

  2. Defina a variável para a instância retornada da propriedade IssuedToken da classe ClientCredentials. Essa instância é retornada pela propriedade ClientCredentials do cliente (herdada de ClientBase<TChannel>) ou pela propriedade Credentials do ChannelFactory:

    IssuedTokenClientCredential itcc = client.ClientCredentials.IssuedToken;
    
    Dim itcc As IssuedTokenClientCredential = client.ClientCredentials.IssuedToken
    
  3. Defina a propriedade LocalIssuerAddress como uma nova instância do EndpointAddress, com o endereço do emissor local como um argumento para o construtor.

    itcc.LocalIssuerAddress = new EndpointAddress("http://fabrikam.com/sts");
    
    itcc.LocalIssuerAddress = New EndpointAddress("http://fabrikam.com/sts")
    

    Como alternativa, crie uma nova instância Uri como um argumento para o construtor.

    itcc.LocalIssuerAddress = new EndpointAddress(new Uri("http://fabrikam.com/sts"),
        addressHeaders);
    
    itcc.LocalIssuerAddress = New EndpointAddress( _
    New Uri("http://fabrikam.com/sts"), addressHeaders)
    

    O parâmetro addressHeaders é uma matriz de instâncias AddressHeader, conforme mostrado.

    itcc.LocalIssuerAddress = new EndpointAddress(
        new Uri("http://fabrikam.com/sts"),
        EndpointIdentity.CreateDnsIdentity("fabrikam.com"),
        addressHeaders);
    
    itcc.LocalIssuerAddress = New EndpointAddress(New Uri("http://fabrikam.com/sts"), _
    EndpointIdentity.CreateDnsIdentity("fabrikam.com"), addressHeaders)
    
  4. Defina a associação para o emissor local usando a propriedade LocalIssuerBinding.

    itcc.LocalIssuerBinding = new WSHttpBinding("LocalIssuerBinding");
    
    itcc.LocalIssuerBinding = New WSHttpBinding("LocalIssuerBinding")
    
  5. Opcional. Adicione comportamentos de ponto de extremidade configurados para o emissor local adicionando esses comportamentos à coleção retornada pela propriedade LocalIssuerChannelBehaviors.

    itcc.LocalIssuerChannelBehaviors.Add(myEndpointBehavior);
    
    itcc.LocalIssuerChannelBehaviors.Add(myEndpointBehavior)
    

Para configurar o emissor local no código

  1. Crie um elemento <localIssuer> como um filho do elemento <issuedToken> que é um filho do elemento <clientCredentials> em um comportamento de ponto de extremidade.

  2. Defina o atributo address para o endereço do emissor local que aceitará solicitações de token.

  3. Defina os atributos binding e bindingConfiguration como valores que fazem referência à associação apropriada a ser usada ao se comunicar com o ponto de extremidade do emissor local.

  4. Opcional. Defina o elemento <identity> como um filho do elemento <localIssuer> e especifique informações de identidade para o emissor local.

  5. Opcional. Defina o elemento <headers> como um filho do elemento <localIssuer> e especifique cabeçalhos adicionais necessários para abordar corretamente o emissor local.

Segurança do .NET Framework

Note que, se um endereço do emissor e a associação forem especificados para uma associação fornecida, o emissor local não será usado para os pontos de extremidade que usam essa associação. Os clientes que pretendem sempre usar o emissor local devem garantir que não usem uma associação como essa ou que modifiquem a associação, de modo que o endereço do emissor seja null.

Confira também