Tokens e declarações 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 declarações que são conjuntos de declarações feitas por uma entidade sobre outra entidade. Por exemplo, em cenários de segurança federada, 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 que o usuário do token SAML prova conhecer. Essa 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 ao 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 de mensagem criada com a chave de prova informa à terceira parte confiável que o token foi emitido para o cliente.

De reivindicações a SamlAttributes

No WCF, instruções em tokens SAML são modeladas como SamlAttribute objetos, que podem ser preenchidos diretamente de Claim objetos, desde que o Claim objeto tenha uma Right propriedade de PossessProperty e a Resource propriedade 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)

Nota

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

De SamlAttributes a Claims

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 ClaimSets propriedade do e podem ser examinadas para determinar se o usuário deve ser autenticado AuthorizationContext e autorizado.

Consulte também