Exportar (0) Imprimir
Expandir Tudo

Simple Web Token (SWT)

Atualizado: março de 2015

Este documento de 2009 foi projetado como um padrão proposto para Simple Web Token (SWT) para a Internet Engineering Task Force (IETF). Embora não esteja completo e não seja um tópico de ajuda, ele fornece informações interessantes sobre o formato e o uso de tokens SWT.

Versão 0.9.5.1, 04 de novembro de 2009

O Simple Web Token (SWT) fornece um formato para transmitir uma asserção entre duas partes. A declaração é um conjunto de pares de nome/valor que foi codificado do formulário HTML e, então, a cadeia de caracteres resultante é declarada por um HMAC de 256 SHA usando uma chave compartilhada entre as partes.

  • Dick Hardt (dick.hardt@microsoft.com), Editor

  • Yaron Goland (yarong@microsoft.com)

Essa especificação está disponível na versão 0.9 do contrato Open Web Foundation, que está disponível em [http://groups.google.com/group/open-web-board/web/owf-agreement-for-final-specs---pt-9-draft] [Observação: URL atualizada pendente.]Você pode examinar as cópias assinadas da versão 0.9 do contrato Open Web Foundation para essa especificação em [Inserir URI de armazenamento de contrato de grupo URI], que também pode incluir outros participantes àqueles listados acima. O uso dessa Especificação pode estar sujeito a outros direitos de terceiros. ESSA ESPECIFICAÇÃO É FORNECIDA “COMO ESTÁ”. Os colaboradores expressamente se isentam de quaisquer garantias (expressas, implícitas ou não), incluindo garantias implícitas de comercialização, não-violação, adequação a uma finalidade específica ou título, relacionadas à Especificação. Todo o risco associado à implementação ou ao uso da Especificação é da responsabilidade do implementador da Especificação e do usuário. EM HIPÓTESE ALGUMA NENHUMA PARTE SERÁ RESPONSÁVEL PERANTE TERCEIROS POR LUCROS CESSANTES OU QUALQUER FORMA DE DANOS INDIRETOS, ESPECIAIS, INCIDENTAIS OU CONSEQUENTES DE QUALQUER ESPÉCIE DE QUALQUER CAUSA DE AÇÃO DE QUALQUER TIPO EM RELAÇÃO A ESSA ESPECIFICAÇÃO OU SEU CONTRATO PRINCIPAL, SEJA BASEADO EM VIOLAÇÃO DE CONTRATO, DELITO (INCLUINDO NEGLIGÊNCIA) OU DE OUTRO TIPO, E INDEPENDENTEMENTE DE A OUTRA PARTE TER SIDO INFORMADA DA POSSIBILIDADE DE TAIS DANOS.

O Simple Web Token (SWT) define um formato para transmitir uma declaração simples que é compactada e formatada facilmente para ser incluída em um cabeçalho para protocolos como HTTP. Uma declaração simples pode ser representada como um conjunto de pares de nome/valor. Os valores de formulário codificado em HTML atendem os objetivos desejados de serem bem entendidos e um formato seguro para cabeçalhos HTTP.

Uma vez que SWTs irá transmitir informações importantes de identidade e acesso, será necessário encontrar uma maneira para evitar a violação. Portanto, apresentamos o par nome/valor obrigatório somente em SWT - HMACSHA256. Isso é sempre o último par nome/valor em um SWT e o valor é o HMAC de 256 SHA dos outros pares de nome/valor no SWT.

A escolha de outros pares de nome/valor usados no SWT está fora do âmbito dessa especificação. Dito isso, há um número de condições e atributos que comprovaram seu utilitário em uma variedade de estruturas de asserção, especificamente: Emissor, público e ExpiresOn. Embora o uso desses pares de nome/valor não seja obrigatório, nós o definimos aqui para facilitar a interoperabilidade.

Por fim, esperamos que muitos atributos sejam criados por terceiros trocando SWTs. Usamos os nomes DNS invertidos para ajudar a facilitar a criação de novos nomes de atributo sem se preocupar com colisões de nome. Também oferecemos suporte ao uso de URIs também como nomes. Os nomes que não são nomes DNS invertidos nem URIs são nomes particulares definidos por um contrato entre o produtor e consumidor do SWT e como tal, estão sujeitos a colisão. Os nomes definidos nesta especificação são reservados.

As palavras-chave “DEVE”, “NÃO DEVE”, “OBRIGADO”, “DEVERÁ”, “NÃO DEVERÁ”, “RECOMENDADO” e “OPCIONAL” deste documento devem ser interpretados como descrito em [RFC2119] (Bradner, B., “Key words for use in RFCs to Indicate Requirement Levels” (Palavras-chave a serem usadas em RFCs para indicar níveis de solicitação)).. Exemplos de nome de domínio usam [RFC2606] (Eastlake, D. e A. Panitz, “Reserved Top Level DNS Names” (Nomes de DNS de nível superior reservado))..

Quem gera um SWT é o produtor do SWT. Quem verifica um SWT é o consumidor do SWT. Antes de gerar um SWT, o produtor e consumidor concordaram em atributos contidos no SWT e trocaram uma chave de 256 bits gerada aleatoriamente fora da banda. Para gerar um SWT, o produtor deve executar as seguintes etapas:

  1. Coletar os pares de nome/valor para ser transportados no SWT e codificar o formato deles como application/x-www-form-urlencoded por 17.13.4 do HTML 4.01

  2. Inserir o formulário SWT codificados e a chave acordada no processo do SHA 256 HMAC.

  3. Pegar o valor resultante do HMAC e codificá-lo com Base64 de acordo com a seção 4 do RFC 4648.

  4. Seguindo as regras de codificação de formulário para adicionar o nome “HMACSHA256” e a base 64 de valor HMAC codificados ao final do formulário SWT codificado.

O consumidor de um SWT executa as seguintes etapas para verificar se um SWT foi produzido pelo produtor e não foi violado:

  1. Pega o SWT enviado e divide a cadeia de caracteres para a parte anterior ao “&HMACSHA256=” e a parte restante, que é a HMAC codificada de URL. A primeira parte é noHMACSWT.

  2. Decodificação da URL da parte restante da cadeia de caracteres SWT. Esse é o submittedHMAC.

  3. Gere um HMAC para noHMACSWT usando a chave de acordo e, em seguida, codifique usando Base64 por codificação de Base64 de acordo com a seção 4 do RFC 4648. A cadeia de caracteres resultante será localHMAC.

  4. Execute uma comparação de caractere por caractere de submittedHMAC e localHMAC. Se as cadeias de caracteres forem iguais, o HMAC no SWT é válido.

Um produtor SWT deseja emitir um SWT com as seguintes informações:

Issuer = issuer.example.com
ExpiresOn = 1/1/2010, Midnight
com.example.group = gold
over18 = true

Com um valor de chave de HMAC (representado em base 64) de:

N4QeKa3c062VBjnVK6fb+rnwURkcwGXh7EoNK34n0uM=

Neste exemplo, Emissor e ExpiresOn são nomes reservados dessa especificação. O atributo com.example.group é algum que foi acordado na definição da sintaxe e semântica do grupo criado pelo proprietário do domínio example.com. O over18 é um atributo definido particularmente estabelecido entre o produtor e o consumidor do SWT.

Antes que seja possível codificar o SWT, é necessário ativar ExpiresOn no número de segundos desde 1/1/1970, meia-noite UTC até a hora de expiração, 1/1/2010, meia-noite. O resultado é 1262304000.

  1. Codifique os pares de nome/valor em um formulário HTML. O resultado é (quebras de linha inseridas para facilitar a leitura):

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true
    
  2. Em seguida, calcule o HMAC do valor anterior usando a chave.

  3. O Base64 codifica o HMAC. O resultado é:

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  4. A URL codifica o HMAC codificado na base64 resultante e o anexa ao final da asserção. O resultado SWT é (quebras de linha inseridas para facilitar a leitura):

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true&
    HMACSHA256=
    AT55%2B2jLQeuigpg0xm%2Fvn7tjpSGXBUfFe0UXb0%2F9opE%3D
    

  1. Dividir o SWT usando: &HMACSHA256= Obtemos uma cadeia de caracteres noHMACSWT de (alimentações de linha adicionadas para facilitar a leitura):

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true&
    
    e a cadeia de caracteres submittedHMAC de:

    AT55%2B2jLQeuigpg0xm%2Fvn7tjpSGXBUfFe0UXb0%2F9opE%3D
    
  2. Em seguida, a url decodifica o submittedHMAC e o resultado é:

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  3. Calculamos o localHMAC usando noHMACSWT e o valor da chave HMAC, o base64 codifica o resultado e obtém o seguinte valor de localHMAC:

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  4. Comparamos submittedHMAC e localHMAC e vemos que são a mesma cadeia de caracteres. Então, a URL decodifica o noHMACSWT para obter acesso aos valores SWT.

Os seguintes pares de nome/valor são opcionais. Elos são definidos para facilitar a interoperabilidade para muitos cenários comuns em que são úteis.

 

Nome Sintaxe de valor Semântica de valor

Emissor

Uma cadeia de caracteres UTF-8

Identifica a parte que emite o SWT.

ExpiresOn

Uma cadeia de caracteres ASCII que representa um número 10 inteiro de base não assinado.

Identifica o momento quando o SWT não é aceito para processamento posterior.

A data/hora de expiração é registrada como o número de segundos que passará de 1970-01-01T0:0:0Z até o momento da expiração, medida em UTC.

Público

Uma cadeia de caracteres UTF-8

Identifica o público SWT ao qual o SWT se destina. A intenção é que se um consumidor SWT recebe um SWT com um valor de público que não identifica a audiência SWT, o SWT será rejeitado.

Um produtor SWT pode usar um nome DNS invertido ou um URI para definir atributos adicionais.

Um produtor e um consumidor de um SWT podem concordar com qualquer nome de atributo que não seja um nome reservado ou um público. Esses nomes não devem não estar na lista de nomes reservados definidos na seção acima “Nomes reservados”. Ao contrário dos nomes públicos, esses nomes privados estão sujeitos a colisão e devem ser usados com cuidado.

Consulte também

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft