Compartilhar via


Declarações e tokens de SAML

Os tokens SAML (Security Assertions Markup Language) são representações XML de declarações. Por padrão, os tokens SAML que o Windows Communication Foundation (WCF) usa em cenários de segurança federados são tokens emitidos.

Os tokens SAML carregam instruções que são conjuntos de declarações feitas por uma entidade sobre outra entidade. Por exemplo, em cenários de segurança federados, as instruções são feitas por um serviço de token de segurança sobre um usuário no sistema. O serviço de token de segurança assina o token SAML para indicar a veracidade das instruções contidas no token. Além disso, o token SAML está associado ao material de chave criptográfica do qual o usuário do token SAML comprova o conhecimento. Esta prova satisfaz a terceira parte confiável de que o token SAML foi, de fato, emitido para esse usuário. Por exemplo, em um cenário típico:

  1. Um cliente solicita um token SAML de um serviço de token de segurança, autenticando-se nesse serviço de token de segurança usando credenciais do Windows.

  2. O serviço de token de segurança emite um token SAML para o cliente. O token SAML é assinado com um certificado associado ao serviço de token de segurança e contém uma chave de prova criptografada para o serviço de destino.

  3. O cliente também recebe uma cópia da chave de prova. Em seguida, o cliente apresenta o token SAML para o serviço de aplicativo (a terceira parte confiável) e assina a mensagem com essa chave de prova.

  4. A assinatura sobre o token SAML informa à terceira parte confiável que o serviço de token de segurança emitiu o token. A assinatura da mensagem criada com a chave de prova informa à terceira parte confiável que o token foi emitido para o cliente.

De Declarações a SamlAttributes

No WCF, as instruções em tokens SAML são modeladas como objetos SamlAttribute, que podem ser populadas diretamente de objetos Claim, desde que o Claim objeto tenha uma propriedade Right e PossessProperty a propriedade de Resource seja do tipo String. Por exemplo:

Claim myClaim = new Claim(
    ClaimTypes.GivenName, "Martin", Rights.PossessProperty);
SamlAttribute sa = new SamlAttribute(myClaim);
Dim myClaim As New Claim(ClaimTypes.GivenName, "Martin", _
Rights.PossessProperty)
Dim sa As New SamlAttribute(myClaim)

Observação

Quando os tokens SAML são serializados em mensagens, quando são emitidos por um serviço de token de segurança ou quando são apresentados pelos clientes para serviços como parte da autenticação, a cota máxima de tamanho da mensagem precisa ser suficientemente grande para acomodar o token SAML e as outras partes da mensagem. Em casos normais, as cotas padrão de tamanho da mensagem são suficientes. No entanto, nos casos em que um token SAML é grande porque contém centenas de declarações, as cotas devem ser aumentadas para acomodar o token serializado. Para obter mais informações, consulte Considerações sobre segurança para dados.

De SamlAttributes a Declarações

Quando os tokens SAML são recebidos em mensagens, as várias instruções no token SAML são transformadas em IAuthorizationPolicy objetos que são colocados no AuthorizationContext. As declarações de cada instrução SAML são retornadas pela propriedade ClaimSets do AuthorizationContext e podem ser examinadas para determinar se o usuário deve ser autenticado e autorizado.

Confira também