Formatos de token com suporte no ACS
Atualizado em: 19 de junho de 2015
Aplica-se ao Azure
Quando seus aplicativos Web e serviços lidam com a autenticação com Microsoft Azure Active Directory Controle de Acesso (também conhecido como serviço de Controle de Acesso ou ACS), o cliente deve obter um token de segurança emitido pelo ACS para fazer logon em seu aplicativo ou serviço. O ACS pode emitir tokens de segurança nos seguintes formatos:
Security Assertion Markup Language (SAML) 1.1 e 2.0
SWT (Token Web Simples)
JSON Web token (JWT)
Observação
O ACS pode emitir tokens de segurança em qualquer um dos seguintes formatos. O formato de token que o ACS usa para um aplicativo Web ou serviço é determinado pela configuração do aplicativo de terceira parte confiável. Para obter informações sobre como configurar aplicativos de terceira parte confiável, consulte Aplicativos de Terceira Parte Confiável.
Security Assertion Markup Language (SAML) 1.1 e 2.0
O Security Assertion Markup Language (SAML) é o formato de tokens mais antigo e mais comum em uso hoje em dia para logon único (SSO) e identidade baseada em declarações. O SAML especifica um formato XML, para tokens como também para protocolos, para executar o SSO de um aplicativo web ou de um serviço web usando os tokens SAML. Para obter mais informações sobre tokens SAML, consulte Especificações de SAML (https://go.microsoft.com/fwlink/?LinkID=213719).
Observação
Os tokens SAML 1.1 e SAML 2.0 são amplamente suportados por várias plataformas de desenvolvimento, incluindo Windows Identity Foundation (https://go.microsoft.com/fwlink/?LinkID=213729).
Segue abaixo um exemplo de um token SAML.
<assertion id="_4fe09cda-cad9-49dd-b493-93494e1ae4f9" issueinstant="2012-09-18T20:42:11.626Z"
version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<issuer>https://test05.accesscontrol.windows.net/</issuer>
<ds:signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:signedinfo>
<ds:canonicalizationmethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:signaturemethod algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<ds:reference uri="#_4fe09cda-cad9-49dd-b493-93494e1ae4f9">
<ds:transforms>
<ds:transform algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:transform algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:transforms>
<ds:digestmethod algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<ds:digestvalue>8qmfRKuATFuo4M96xuci7HCLUGUeO3eBxHOi9/HaFNU=</ds:digestvalue>
</ds:reference>
</ds:signedinfo>
<ds:signaturevalue>UWcXJElfrP8hfdNi8ipzSjfxCYGYzoylkn5HdSa8IhphvyZBvbZl1OFEbMSygoo8xNgnywUNPuzZP8nV7CwZNuSWVZZSrF2pHAswBKQoJoodpzrGRR0ruT+A2sjXfnLQqN+X/xanXqqg4ViUOR9xHvn8vzaRwYxPPsjI4OXq0hzLlyuBzhw42XHzZk1qknQr1wp/lZTMwrFnY38gziUZ+Ci1Duen5Xt9k+0ZFujtSBqJKIran1V263o8CkvoahNcNKT//OcXc3va7zeJf67V9/lwY34MkFoqqfeuTSzEuZfk7pYRNqwhOZGhokpR+1qHjEbJr3p6dOOPkuQp9p6zsQ==</ds:signaturevalue>
<keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data> <X509Certificate>MIIDCDCCAfCgAwIBAgIQRmI8p7P/aphMv5Kr9vQpqTANBgkqhkiG9w0BAQUFADAtMSswKQYDVQQDEyJBQVJPTkJPT0subnRkZXYuY29ycC5taWNyb3NvZnQuY29tMB4XDTEyMDUyMTIzMjMxMFoXDTEzMDUyMTAwMDAwMFowLTErMCkGA1UEAxMiQUFST05CT09LLm50ZGV2LmNvcnAubWljcm9zb2Z0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI79l6EOSWswJn3d9i4yfZh9Cwo2XNhb4tOWvmljCKFlrWoz/Drch5aOzdmI/yFaqkyX7BXc/zoSmX1n3VkqHIeJkGECcZX2bD4jPuICVmKBcXo0SeQ+2vF6DoqjVKaegWrPsqmDrlCscnlMLb11Fg1Ffqkm8wyyWwbQvC5VnVf0i9DPE0n+i3NJi9cT57obrNRkQzwfBZy08I2JlpxLfaUUDhHlF99C1MtBduzn3au+S20gom1cHAcSvHBormXbjPZ5F6RJUz7kO/U+M5rYkiS+vtANtnBlUAK8fRmEUrYFRMr1tyiOXcRid/7UJP3e0EmAsneMnuD9WO/mK6MuzIECAwEAAaMkMCIwCwYDVR0PBAQDAgQwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4IBAQBCRM9maY5ZE+wIxefxjT0IAqp7H6l062PKOGdld5MapOJUWbng2CrfUV3YI5OSD9yhevgDne3jf2DUBv5QndHdms+FL260ydDmwet4A5kJi3ZBO4sR/PZTz3FdeeOwdTeUS2wAMJuphAZ1+PUVk25bbEu/DKmgeYzRn64CHWqk5sPKzH9jAszvX2EeoClI+8Sp/bXHTwzEUOFYcicPOO+tuFTqHOYBDT5bE42rAp/SaC1wXbmTCGS12gfCZCrlml6LZNTsKQWBF2szXOPGcFcInGkauZDUUtZd+921uy0E/sYwgNfi8phU1aGZjIESVFQ70LpfvIMwF6++BRX12icW</X509Certificate>
</X509Data>
</keyinfo>
</ds:signature>
<subject>
<NameID>abc1def2ghi3jkl4mno5pqr6stu7vwx8yza9bcd0efg=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer" />
</subject>
<conditions notbefore="2012-09-18T20:42:11.610Z" notonorafter="2012-09-18T21:42:11.610Z">
<AudienceRestriction>
<Audience>https://localhost:63000/</Audience>
</AudienceRestriction>
</conditions>
<attributestatement>
<Attribute Name="https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider">
<AttributeValue>uri:WindowsLiveID</AttributeValue>
</Attribute>
</attributestatement>
</assertion>
SWT (Token Web Simples)
Os tokens Simple Web Token (SWT) estão em conformidade com a especificação SimpleWebToken. Os tokens SWT são expressados como pares de chave/valor de formato codificado assinados com uma chave criptográfica. A especificação comanda a presença de alguns pares de chave/valor, mas deixa espaço para pares de chave/valor específicos do aplicativo. As chaves que estão sempre presentes em um token SWT emitido pelo ACS são mostradas na tabela a seguir.
Chave | Descrição |
---|---|
Emissor |
Uma representação do namespace do serviço ACS que emitiu o token. O padrão para esse valor é https://< servicenamespace.accesscontrol.windows.net/>. |
Público |
O valor do |
ExpiresOn |
O tempo no qual o token expira. |
HMACSHA256 |
A assinatura HMACSHA256 de todos os outros pares de chave/valor. Este par de chave/valor sempre é o último par de chave/valor no token. A representação do formato codificado dos outros pares de chave/valor (incluindo as declarações específicas de aplicativos) é assinado. |
Além desses pares chave/valor, o ACS adiciona uma ou mais declarações a um token antes da emissão. Essas declarações são controladas pela configuração de regra presente no ACS no momento da solicitação de token. Todas essas declarações têm um tipo e um ou mais valores, onde os tipos e os valores são cadeias de caracteres. Quando uma declaração contém mais de um valor, os valores são separados pelo caractere da vírgula (","). As declarações são codificadas como pares de chave/valores, exatamente como os pares de chave/valores descritos na tabela anterior.
Veja a seguir um exemplo de um token ACS que contém declarações representadas como pares chave/valor.
Audience=http%3a%2f%2flocalhost%2fmyservice&ExpiresOn=1255913549Issuer=https%3a%2f%2fmyservice.accesscontrol.windows.net%2f&role=Admin%2cUser&role=Admin%2cUser&&HMACSHA256=sT7Hr9z%2b3t1oDFLpq5GOToVsu6Dyxpq7hHsSAznmwnI%3d
Com a exceção do par de valor/chave HMACSHA256, estes pares podem estar em qualquer ordem. O token ACS a seguir é equivalente ao token ACS anterior, exceto para as assinaturas que são diferentes.
role=Admin%2cUser&customerName=Contoso%20Corporation&Issuer=https%3a%2f%2fmyservice.accesscontrol.windows.net%2f&Audience=http%3a%2f%2flocalhost%2fmyservice&ExpiresOn=1255912922&HMACSHA256=yuVO%2fwc58%2ftYP36%2fDM1mS%2fHr0hswpsGTWwgfvAbpL64%3d
A seguinte tabela mostra os conteúdos do token com valores decodificados em URL.
Fonte | Chave | Calor codificado em URL | Valor decodificado em URL |
---|---|---|---|
Declarações definidas pelo usuário |
função |
Admin%2cUser |
Admin,User |
customerName |
Contoso%20Corporation |
Contoso Corporation |
|
Declarações definidas pelo sistema |
Emissor |
https%3a%2f%2fmyservice.accesscontrol.windows.net%2f |
https://myservice.accesscontrol.windows.net/ |
Público |
http%3a%2f%2flocalhost%2fmyservice |
https://localhost/myservice |
|
ExpiresOn |
1255912922 |
1255912922 |
|
HMACSHA256 |
yuVO%2fwc58%2ftYP36%2fDM1mS%2fHr0hswpsGTWwgfvAbpL64%3d |
yuVO/wc58/tYP36/DM1mS/Hr0hswpsGTWwgfvAbpL64= |
JSON Web token (JWT)
O suporte do JSON Web token (JWT) esta sendo adicionado em beta, isto significa que podem haver alterações recentes sem aviso prévio.
A implementação do ACS do formato de token JWT segue o rascunho 9 da especificação JWT. Para obter mais informações, consulte https://go.microsoft.com/fwlink/?LinkID=253666. Similares aos tokens SWT, o JWT é um formato de token compacto que é apropriado para serviços web REST. Ao contrário do formato SWT, o JWT dá suporte a uma variedade de opções de assinatura. O ACS dá suporte a assinaturas simétricas e assimétricas para tokens JWT. As declarações que estão sempre presentes nos tokens JWT emitidos pelo ACS são mostradas na tabela a seguir.
Declaração | Tipo de declaração usado pelo JWT | Descrição |
---|---|---|
Emissor |
iss |
Uma representação do namespace Controle de Acesso que emitiu o token. O padrão para esse valor é https://< namespace.accesscontrol.windows.net/> |
Público |
aud |
O valor do escopo usado para solicitar o token. Este valor é usado para identificar o recipiente do token destinado. |
Não Antes De |
nbf |
O tempo antes do qual o token não é válido. |
Expiração |
exp |
O tempo no qual o token expira. |
Os seguintes algoritmos oferecem suporte para os tokens JWT:
Identificador de algoritmo no cabeçalho do JWT | Descrição |
---|---|
HS256 |
Algoritmo HMAC usando o hash SHA-256. Para assinar o JWT com uma chave simétrica. |
RS256 |
Algoritmo RSA usando o hash SHA-256. Para assinar o JWT com uma chave assimétrica, usando um certificado X.509. |
Aqui está um exemplo de um token JWT:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJodHRwczovL2NvbnRvc28uY29tL3JlbHlpbmdwYXJ0eSIsImlzcyI6Imh0dHBzOi8vY29udG9zby5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0LyIsIm5iZiI6MTMzNjA2NzMzOCwiZXhwIjoxMzM2MDcwOTM4LCJuYW1laWQiOiJjbGllbnRBcHAiLCJpZGVudGl0eXByb3ZpZGVyIjoiY29udG9zby5jb20ifQ._3dZQ6cmmFgrZ_-VmOLrr7CHne3Xdko_WtE6-Je5Ihw.
O JWT está composto de segmentos, que estão delimitados usando ‘.’. A seguinte tabela mostra os segmentos decodificados de um token JWT:
Segmento do JWT | Valor |
---|---|
Cabeçalho do JWT |
{"typ":"JWT","alg":"HS256"} |
Conjunto de declarações JWT |
{"aud":"https://contoso.com/relyingparty","iss":"https://contoso.accesscontrol.windows.net/","nbf":1336067338,"exp":1336070938,"nameid":"clientApp","identityprovider":"contoso.com"} |
Assinatura |
_3dZQ6cmmFgrZ_-VmOLrr7CHne3Xdko_WtE6-Je5Ihw |
É representada uma declaração única com vários valores como uma matriz JSON. Por exemplo se um usuário é membro de várias funções, a declaração da função apareceria como segue:
{
"aud":"https://contoso.com/relyingparty",
"iss":"https://contoso.accesscontrol.windows.net/",
"nbf":1336067338,"exp":1336070938,
"nameid":"frankm",
"identityprovider":"contoso.com",
“role”: [ “admin”, “user” ]
}
Tokens e Protocolos ACS
Quando um token SAML 2.0, SAML 1.1, SWT, JWT é emitido, o ACS usa vários protocolos padrão para retornar o token a um aplicativo Web ou serviço. O ACS dá suporte às seguintes combinações de formato de token/protocolo:
O ACS pode emitir e retornar tokens SAML 2.0 nos protocolos WS-Trust e WS-Federation (dependendo do protocolo usado na solicitação de token).
O ACS pode emitir e retornar tokens SAML 1.1 no WS-Federation e nos protocolos de WS-Trust relacionados (dependendo do protocolo usado na solicitação de token).
O ACS pode emitir e retornar tokens SWT nos protocolos WS-Federation, WS-Trust e OAuth WRAP ou OAuth 2.0 (dependendo do protocolo usado na solicitação de token).
O ACS pode emitir tokens JWT nos protocolos WS-Federation, WS-Trust e OAuth 2.0 (dependendo do protocolo usado na solicitação de token).