1. Chaves públicas

O servidor Connect2id publica suas chaves criptográficaspúblicas:

  • Para permitir que os clientes verifiquem a autenticidade dos tokens de ID emitidos.
  • Para permitir que os clientes verifiquem a autenticidade das respostas do UserInfo codificadas pelo JWT.
  • Para permitir que os clientes verifiquem a autenticidade das respostas de autorização (JARM) protegidas pelo JWT.
  • Para habilitar os servidores de recursos (APIs web) para verificar tokens de acesso auto-contidos (codificados por JWT).
  • Para permitir que os clientes criptografem objetos de solicitação (JAR) para o servidor.
  • Para permitir que os clientes criptografem dicas de token de ID para o servidor.

As chaves públicas são extraídas do conjunto JWK do servidor configurado e disponibilizadas no mesmo formato, como JSON Web Keys (JWK).

A validação de assinatura (JWS) e a criptografia (JWE) dos JWTs podem ser realizadas com a biblioteca Nimbus JOSE+JWT de código aberto (Java), ou qualquer outra biblioteca compatível com JWS e JWE.

2. O conjunto de URL do JWK

Ele pode ser descoberto a partir do anunciado nos metadados do servidor Connect2id e tem este formulário:jwks_uri

https://[base-server-url]/jwks.json

3. Visão geral da API da Web

  • Recursos
    • /jwks.json [GET]
  • Representações
    • Conjunto JWK
  • Erros
    • 404 Não Encontrado
    • 500 erros internos do servidor

4. Recursos

4.1 /jwks.json

4.1.1 GET

Recupera o conjunto JWK público do servidor Connect2id.

Êxito:

Erros:

  • 404 Não Encontrado
  • 500 erros internos do servidor

Solicitação de exemplo para obter as chaves públicas do servidor:

GET /jwks.json HTTP/1.1
Host: c2id.com

Resposta de exemplo com o conjunto JWK público do servidor, contendo chaves de assinatura e criptografia do tipo RSA, EC e OKP (para EdDSA):


HTTP/1.1 200 OK
Content-Type: application/json

{
  "keys": [
    {
      "kty": "RSA",
      "e": "AQAB",
      "use": "sig",
      "kid": "CXup",
      "n": "hrwD-lc-IwzwidCANmy4qsiZk11yp9kHykOuP0yOnwi36VomYTQVEzZXgh2sDJpGgAutdQudgwLoV8tVSsTG9SQHgJjH9Pd_9V4Ab6PANyZNG6DSeiq1QfiFlEP6Obt0JbRB3W7X2vkxOVaNoWrYskZodxU2V0ogeVL_LkcCGAyNu2jdx3j0DjJatNVk7ystNxb9RfHhJGgpiIkO5S3QiSIVhbBKaJHcZHPF1vq9g0JMGuUCI-OTSVg6XBkTLEGw1C_R73WD_oVEBfdXbXnLukoLHBS11p3OxU7f4rfxA_f_72_UwmWGJnsqS3iahbms3FkvqoL9x_Vj3GhuJSf97Q"
    },
    {
      "kty": "EC",
      "use": "sig",
      "crv": "P-256",
      "kid": "yGvt",
      "x": "pvgdqM3RCshljmuCF1D2Ez1w5ei5k7-bpimWLPNeEHI",
      "y": "JSmUhbUTqiFclVLEdw6dz038F7Whw4URobjXbAReDuM"
    },
    {
      "kty": "EC",
      "use": "sig",
      "crv": "P-384",
      "kid": "9nHY",
      "x": "JPKhjhE0Bj579Mgj3Cn3ERGA8fKVYoGOaV9BPKhtnEobphf8w4GSeigMesL-038W",
      "y": "UbJa1QRX7fo9LxSlh7FOH5ABT5lEtiQeQUcX9BW0bpJFlEVGqwec80tYLdOIl59M"
    },
    {
      "kty": "EC",
      "use": "sig",
      "crv": "P-521",
      "kid": "tVzS",
      "x": "AZgkRHlIyNQJlPIwTWdHqouw41k9dS3GJO04BDEnJnd_Dd1owlCn9SMXA-JuXINn4slwbG4wcECbctXb2cvdGtmn",
      "y": "AdBC6N9lpupzfzcIY3JLIuc8y8MnzV-ItmzHQcC5lYWMTbuM9NU_FlvINeVo8g6i4YZms2xFB-B0VVdaoF9kUswC"
    },
    {
      "kty": "OKP",
      "use": "sig",
      "crv": "Ed25519",
      "kid": "27zV",
      "x": "0I6olrZGYml7JGusuKJW9G7D0DZ9UormSady9kR7V4Q"
    },
    {
      "kty": "RSA",
      "e": "AQAB",
      "use": "enc",
      "kid": "IHMc",
      "n": "lLrhwERiPmq7XOz6Rwk8q4ey_OGcL4P56Ip01mzKMUfysIwo-nUdwDI_9ntYohpvqiTjnrtZOENhhoqne5M4hqpSfBMmCWSvWL_3wa8FanRWd6lPgGdKJ1a3vV0gLxnCbmdho1CSuSszV4736WkjdDhLcXSRN1kWwWbok94FdPD_egCyBY3cwhvuRzmUgE8LDh-VnNRh1BYc7e9yEMublza8qJpW-N5ljHEU0on08X-lsyl4djEac74H7taDcmtchPLYZy0-ZIxgLmosQ2aYIt6xycfPYsm5x9CGetUqhClpLLaTcyTGq_pH4ECdZtkYHcYJM-3q-XDZTqB6wUaggw"
    },
    {
      "kty": "EC",
      "use": "enc",
      "crv": "P-256",
      "kid": "1yFA",
      "x": "_-aKZeuwWDv4v89dPGdKtpOuOepc_0qDZDhcv3omzX0",
      "y": "Gc5b7muOqbi4QvYJO24a4IqQoOY1pPM69DcpI605Vmw"
    },
    {
      "kty": "EC",
      "use": "enc",
      "crv": "P-384",
      "kid": "TqZ6",
      "x": "3Ex0yUSLvhaOriP8U78kZEEJXxkC0oQmwo1zHTe_nhgKx2YPS97-qmDdRMkByxJ9",
      "y": "MCosrhjIYP4lkoan45MxAZE3QB6IKau5nZHpQ_qDXH8jgcIo2l3M8wdN6iI08kcW"
    },
    {
      "kty": "EC",
      "use": "enc",
      "crv": "P-521",
      "kid": "h38C",
      "x": "AVMBSexPHgq536pZQjN6Si1HAdUdfiW4xrdYzNHR2A9z4zovnKi5xrQ9hWX8QUs4ejVQ3bE9ufhOYL3D7oTwx9Jb",
      "y": "AeMeo858k_6ktxNhlpxBSwGL2hmTI1nBeGi2ZrMVl2qzdjOFf-AVFRSsE9DhAD9sWVUrGrzwONbfmqwIlgbjeH7L"
    }
  ]
}

5. Representações

5.1 Conjunto JWK do servidor

As chaves públicas do servidor Connect2id (uma ou mais), no formato JWK set RFC 7517.

Cada tecla do conjunto JWK tem um identificador único (). Os JWTs assinados emitidos identificarão a chave no parâmetro de cabeçalho JWS.kid kid

Exemplo JWK definido incluindo uma única chave RSA de assinatura pública:


{
  "keys" : [
     {
       "kty" : "RSA",
       "use" : "sig",
       "kid" : "P9Zd",
       "e"   : "AQAB",
       "n"   : "kWp2zRA23Z3vTL4uoe8kTFptxBVFunIoP4t_8TDYJrOb7D1iZNDXVeEsYKp6ppmrTZDAgd-cNOTKLd4M39WJc5FN0maTAVKJc7NxklDeKc4dMe1BGvTZNG4MpWBo-taKULlYUu0ltYJuLzOjIrTHfarucrGoRWqM0sl3z2-fv9k"
     }
  ]
}

5. Erros

404 Não Encontrado

O recurso solicitado não existe.

Exemplo:


HTTP/1.1 404 Not Found


500 erros internos do servidor

Ocorreu um erro interno do servidor. Verifique os registros do servidor Connect2id para obter detalhes.

Exemplo:


HTTP/1.1 500 Internal Server Error



Artigo Original