IBM Cloud Docs
Validando tokens

Validando tokens

A validação de token é uma parte importante do desenvolvimento de aplicativo moderno. Ao validar tokens, será possível proteger seu aplicativo ou APIs de usuários não autorizados. O IBM Cloud® App ID usa tokens de acesso e identidade para assegurar que um usuário ou aplicativo seja autenticado antes de conceder acesso a ele. Se vocêestiver usando um dos SDKs fornecidos pelo App ID, a obtenção e a validação deseus tokens serão feitas para você.

Para obter mais informações sobre como os tokens são usados no App ID, consulte Entendendo os tokens.

Os tokens são usados para verificar se uma pessoa é quem diz ser. Eles confirmam quaisquer permissões de acesso que ousuário pode manter por um período de tempo especificado. Quando um usuário se conecta ao seu aplicativo e um token é emitido, o seu aplicativo deve validar o usuário antes se conceder acesso a ele.

E se eu estiver trabalhando em um idioma para o qual o App ID nãotiver um SDK?

Você tem três opções:

  • Trabalhe com as APIs do App ID
  • Implemente sua própria lógica de validação
  • Usar qualquer SDK de software livre compatível com OIDC

Usando as APIs do App ID

Usando a introspecção, é possível usar o App ID para validar seus tokens.

  1. Envie uma solicitação de POST para o terminal da API /introspectpara validar seu token. A solicitação deve fornecer o token e um cabeçalho de autorização básico que contém oidentificador de cliente e o segredo.

    Solicitação de exemplo:

    POST /oauth/v4/<tenantID>/introspect HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Basic jdFlUaGlZUzAwTW0Tjk15TmpFMw==
    Cache-Control: no-cache
    
    token=XXXXX.YYYYY.ZZZZZ
    
  2. O servidor verifica a expiração e a assinatura do token e retorna um objeto JSON que informa se o token está ativo ouinativo.

    Resposta de exemplo:

    {
    "active": true
    }
    

Validando tokens manualmente

É possível validar seus tokens localmente analisando o token, verificando a assinatura do token e validando assolicitações que estão armazenadas no token.

  1. Analisar os tokens. O JSON Web Token(JWT) é uma forma padrão de transmitir informações com segurança. Ele consiste em três partes principais: cabeçalho, carga útil e assinatura. Eles são codificados por base64URL e separados por um ponto (.). É possível usar qualquer decodificador base64URL disponível para analisar o token. Como alternativa, você pode usar qualquer uma das bibliotecas listadas para analisar o token.

    Token codificado de exemplo:

    eyJhbGciOiJSUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJhMmszIn0
    .eyJpc3MiOiJhcHBpZC1vYXV0aCIsImF1ZCI6ImFiYzEyMyIsImV4cCI6MTU2NDU2Nn0
    .IycnAGUmMHzpTWbe-qaRsx0B4Zi-SVav710Fb_8CTCQvLrHX9d42WuCZ5bW
    d-ikgEsf6waQxeBfhfwYxwHN87LZupApagVMZtylVAnXhG1pHu_32wbZsPvg6QjzNO
    j6ys2Lfl3qfb5Qrp9u4IsZltKPEN8HdfeOcKXxpw6UqP-8
    

    Exemplo de token decodificado:

    {
    "alg": "RS256",
    "typ": "JOSE",
    "kid": "a2k3",
    "iss": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6050a61",
    "aud": "abc123",
    "exp": 1564566
    }
    
  2. Faça uma chamada para o /publickeys endpoint para recuperar as suas chaves públicas As chaves públicas que são retornadas são formatadas como JSON Web Keys(JWK).

    Solicitação de exemplo:

    GET /oauth/v4/<tenantID>/publickeys HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Cache-Control: no-cache
    
  3. Armazene as chaves em seu cache do aplicativo para uso futuro. O armazenamento das chaves acelerará o processo e evitaráo atraso da rede se outra chamada for feita.

  4. Importe os parâmetros de chave pública.

    Resposta de exemplo:

    {
    "keys": [
       {
          "kty": "RSA",
          "use": "sig",
          "n": "AsdaE",
          "e": "SDAasw",
          "kid": "ad123dCAz"
       }
    ]
    }
    
    Parâmetros de chave pública
    Parâmetro Descrição
    kty Define o algoritmo usado.
    use Define o propósito da chave.
    kid Define o ID exclusivo da chave.
    Outro Pode haver outros parâmetros restantes que sejam específicos para seu algoritmo que também devem ser importados.
  5. Verifique a assinatura do token. O cabeçalho do token contém o algoritmo que foi usado para assinar o token e o ID dachave ou a solicitação kid da chave pública correspondente. Como as chaves públicas não sãomudadas frequentemente, é possível armazenar em cache as chaves públicas em seu aplicativo e, ocasionalmente,atualizá-las. Se a chave armazenada em cache estiver ausente da solicitação kid, será possível validar os tokens localmente.

    1. Faça com que seu aplicativo verifique se o conteúdo do cabeçalho do token recebido corresponde aos parâmetros da chavepública.
    2. Verifique especificamente se os mesmos algoritmos foram usados e se seu cache de chave pública contém uma chave com o IDde chave relevante.
    3. Assegure-se de que o valor do hash seja o mesmo que a assinatura do formato PEM da chave pública. Seu valor do hash podeser obtido combinando e realizando hashing do cabeçalho da carga útil do token. Como esse processo pode ser complexo paraimplementar manualmente, pode ser útil usar uma das bibliotecas listadas paravalidar a assinatura.
  6. Valide as solicitações que estão armazenadas nos tokens. Para conferir verificações futuras, é possível usaressa lista.

    Declarações que devem ser validadas
    Solicitação Descrição
    iss O emissor deve ser o mesmo do servidor OAuth do App ID.
    exp O horário atual deve ser menor que o tempo de validade.
    aud O público deve conter o identificador de cliente de seu aplicativo.
    tenant O locatário deve conter o ID do locatário de seu aplicativo.
    scope O escopo de permissões que são concedidas para o usuário. Isso é específico para o token de acesso.