Usando PKCE em concessões de código de autorização - Amazon Cognito

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando PKCE em concessões de código de autorização

O Amazon Cognito oferece suporte à autenticação Proof Key for Code Exchange (PKCE) em concessões de códigos de autorização. PKCEé uma extensão do OAuth Concessão de código de autorização 2.0 para clientes públicos. PKCEprotege contra o resgate de códigos de autorização interceptados.

Como o Amazon Cognito usa PKCE

Para iniciar a autenticaçãoPKCE, seu aplicativo deve gerar um valor de string exclusivo. Essa string é o verificador de código, um valor secreto que o Amazon Cognito usa para comparar o cliente que está solicitando a concessão de autorização inicial com o cliente que está trocando o código de autorização por tokens.

Seu aplicativo deve aplicar um SHA256 hash à string do verificador de código e codificar o resultado em base64. Passe a string com hash para o Autorizar endpoint como um code_challenge parâmetro no corpo da solicitação. Quando seu aplicativo troca o código de autorização por tokens, ele deve incluir a string do verificador de código em texto simples como um code_verifier parâmetro no corpo da solicitação para o. Endpoint de token O Amazon Cognito executa a mesma hash-and-encode operação no verificador de código. O Amazon Cognito só retornará tokens de ID, acesso e atualização se determinar que o verificador de código resulta no mesmo desafio de código recebido na solicitação de autorização.

Para implementar o fluxo de concessão de autorização com PKCE
  1. Abra o console do Amazon Cognito. Se solicitado, insira suas AWS credenciais.

  2. Escolha User Pools (Grupos de usuários).

  3. Escolha um grupo de usuários existente na lista ou crie um grupo de usuários. Se você criar um grupo de usuários, você será solicitado a configurar um cliente de aplicativo e configurar a interface de usuário hospedada durante o assistente.

    1. Se você criar um novo grupo de usuários, configure um cliente de aplicativo e configure a interface hospedada durante a configuração guiada.

    2. Se você configurar um grupo de usuários existente, adicione um domínio e um cliente de aplicativo público, caso ainda não tenha feito isso.

  4. Gere uma sequência alfanumérica aleatória, normalmente um identificador universalmente exclusivo (UUID), para criar um desafio de código para o. PKCE Essa string é o valor do code_verifier parâmetro que você enviará em sua solicitação para Endpoint de token o.

  5. Faça o hash da code_verifier string com o SHA256 algoritmo. Codifique o resultado da operação de hashing para base64. Essa string é o valor do code_challenge parâmetro que você enviará em sua solicitação para Autorizar endpoint o.

    Os seguintes exemplos de Python exemplo gera um code_verifier e calcula ocode_challenge:

    #!/usr/bin/env python3 import random from base64 import urlsafe_b64encode from hashlib import sha256 from string import ascii_letters from string import digits # use a cryptographically strong random number generator source rand = random.SystemRandom() code_verifier = ''.join(rand.choices(ascii_letters + digits, k=128)) code_verifier_hash = sha256(code_verifier.encode()).digest() code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=') print(f"code challenge: {code_challenge}") print(f"code verifier: {code_verifier}")

    A seguir está um exemplo de saída do Python roteiro:

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. Conclua o login na interface de usuário hospedada com uma solicitação de concessão de código de autorização com. PKCE Veja a seguir um exemploURL:

    https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
  7. Colete a autorização code e troque-a por tokens com o endpoint do token. Veja a seguir uma solicitação de exemplo:

    POST /oauth2/token HTTP/1.1 Host: mydomain.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded Content-Length: 296 redirect_uri=https%3A%2F%2Fwww.example.com& client_id=1example23456789& code=7378f445-c87f-400c-855e-0297d072ff03& grant_type=authorization_code& code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  8. Analise a resposta. Ele conterá tokens de ID, acesso e atualização. Para obter mais informações sobre o uso de tokens do grupo de usuários do Amazon Cognito, consulte. Entendendo os tokens JSON da web do pool de usuários (JWTs)