Todos os produtos
Search
Central de documentação

Resource Access Management:Access Alibaba Cloud APIs from a native application

Última atualização: Jun 26, 2026

Este tópico descreve como usar o fluxo de código de autorização OAuth 2.0 com Proof Key for Code Exchange (PKCE) para permitir que um aplicativo nativo (como um app desktop ou móvel) acesse as APIs do Alibaba Cloud em nome de um usuário com segurança.

Pré-requisitos

  • Você já criou um aplicativo nativo OAuth 2.0 no console do Resource Access Management (RAM) e especificou uma url de redirecionamento.

  • Armazene o ID do seu aplicativo com segurança. Aplicativos nativos não usam segredo de cliente.

Visão geral do fluxo de autorização

O fluxo de código de autorização com PKCE é o método mais seguro e recomendado para aplicativos nativos. Ele adiciona uma camada de segurança que impede ataques de interceptação de código de autorização.

  1. Geração do code_verifier e do code_challenge: O aplicativo nativo gera uma string aleatória de alta entropia (o code_verifier) e uma versão transformada dela (o code_challenge).

  2. Início do login pelo usuário: O aplicativo abre o navegador no endpoint de autorização do Alibaba Cloud, passando o code_challenge e seu método de transformação.

  3. Concessão de consentimento pelo usuário: O usuário faz login na conta do Alibaba Cloud e concede as permissões solicitadas ao aplicativo.

  4. Recebimento do código de autorização: O servidor de autorização redireciona o usuário à url de redirecionamento especificada pelo aplicativo, incluindo um código de autorização de uso único.

  5. Troca do código por tokens: O aplicativo envia uma requisição ao endpoint de token do Alibaba Cloud para trocar o código de autorização e o code_verifier original por um token de acesso e um token de atualização. O servidor valida o code_verifier comparando-o ao code_challenge da primeira etapa.

  6. Acesso a recursos protegidos: O aplicativo usa o token de acesso para fazer chamadas de API autorizadas aos serviços do Alibaba Cloud.

Etapa 1: Solicite um código de autorização com PKCE

Para iniciar o fluxo, gere os parâmetros PKCE no aplicativo e direcione o usuário ao endpoint de autorização.

1. Gere os parâmetros PKCE

Primeiro, crie e registre um code_verifier, que consiste em uma string aleatória criptográfica de alta entropia com 43 a 128 caracteres.

Em seguida, crie um code_challenge transformando o code_verifier com um dos métodos a seguir:

Método de transformação

Descrição

plain

O code_challenge é idêntico ao code_verifier. Não recomendamos este método para ambientes de produção.

S256

(Recomendado) O code_challenge corresponde a um hash SHA-256 da string ASCII do code_verifier, codificado em Base64-url.code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))

Exemplo com S256:

  • Se code_verifier = dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

  • Então code_challenge = E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM

2. Redirecione para o endpoint de autorização

Abra o navegador do sistema no endpoint de autorização do Alibaba Cloud (https://signin.alibabacloud.com/oauth2/v1/auth) com os seguintes parâmetros.

Parâmetro

Obrigatório

Descrição

client_id

Sim

ID do seu aplicativo nativo.

redirect_uri

Sim

url de redirecionamento para onde o usuário será enviado após conceder consentimento. Deve corresponder exatamente a uma das URIs registradas para o aplicativo.

response_type

Sim

Defina como code.

scope

Não

Lista de escopos OAuth solicitados pelo aplicativo, separados por espaços. Se omitida, todos os escopos configurados para o aplicativo serão solicitados.

state

Não

Valor opaco usado para manter o estado entre a requisição e o callback. Recomendamos fortemente usar uma string aleatória e imprevisível para evitar ataques de Cross-Site Request Forgery (CSRF).

code_challenge_method

Não

Método de transformação utilizado. Valores válidos: plain e S256.

Valor padrão: plain.

code_challenge

Não

String code_challenge gerada.

Nota

Se você omitir este parâmetro, o PKCE não será usado e o fluxo ficará vulnerável a ataques de interceptação de código de autorização. Nesse caso, um invasor que interceptar o código poderá trocá-lo por um token de acesso.

prompt

Não

Defina este parâmetro como admin_consent para forçar o servidor de autorização a exibir a tela de consentimento ao usuário, mesmo que ele já tenha concedido as permissões anteriormente. Se omitido, a tela aparecerá apenas na primeira vez que o usuário conceder permissão ao aplicativo.

Exemplo de requisição

https://signin.alibabacloud.com/oauth2/v1/auth?
client_id=98989****
&redirect_uri=meeting%3A%2F%2Fauthorize%2F
&response_type=code
&scope=openid%20%2Fworksuite%2Fuseraccess
&state=123456****
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSst****
&code_challenge_method=S256

Exemplo de resposta

Se o usuário conceder consentimento, o servidor de autorização redirecionará o navegador para sua redirect_uri, anexando o código de autorização e o estado como parâmetros de consulta.

GET HTTP/1.1 302 Found
Location: meeting://authorize/?code=ABAFDGDFXYZW888&state=123456****                     

Etapa 2: Troque o código de autorização por um token de acesso

Após receber o código de autorização, envie uma requisição POST do servidor backend para o endpoint de token do Alibaba Cloud (https://oauth.alibabacloud.com/v1/token) para trocar o código pelos tokens.

Parâmetros da requisição (corpo POST)

Parâmetro

Obrigatório

Descrição

code

Sim

Código de autorização recebido na Etapa 1.

client_id

Sim

ID do seu aplicativo nativo.

redirect_uri

Sim

Mesma url de redirecionamento usada na requisição da Etapa 1.

grant_type

Sim

Defina como authorization_code.

code_verifier

Não

String code_verifier original gerada na Etapa 1.

Exemplo de requisição

POST /v1/token HTTP/1.1 
Host: oauth.alibabacloud.com 
Content-Type: application/x-www-form-urlencoded
code=ABAFDGDFXYZW888&
client_id=98989****
redirect_uri=meeting://authorize/&
grant_type=authorization_code&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk                    

Exemplo de resposta

Se a requisição for bem-sucedida, o endpoint de token retornará um objeto JSON contendo os tokens.

{
  "access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****",
  "id_token": "eyJhbGciOiJIUzI1****"
}                      

Etapa 3 (Opcional): Atualize o token de acesso

Use o token de atualização para obter um novo token de acesso sem exigir que o usuário faça login novamente. Endpoint: https://oauth.alibabacloud.com/v1/token

Parâmetros da requisição (corpo POST)

Parâmetro

Obrigatório

Descrição

refresh_token

Sim

Token de atualização recebido anteriormente.

client_id

Sim

ID do seu aplicativo nativo.

grant_type

Sim

Defina como refresh_token.

Exemplo de requisição

POST /v1/token HTTP/1.1 
Host: oauth.alibabacloud.com 
Content-Type: application/x-www-form-urlencoded
refresh_token=Ccx63VVeTn2dxV7ovXXfLtAqLLERAH****
client_id=98989****
grant_type=refresh_token

Exemplo de resposta

O endpoint de token retorna um novo token de acesso.

{
  "access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****",
  "token_type": "Bearer",
  "expires_in": 3600,
}                      

Revogue um token de atualização

Quando um usuário sair do aplicativo ou desconectar a conta, revogue o token de atualização associado para invalidá-lo.

Endpoint: https://oauth.alibabacloud.com/v1/revoke

Parâmetros da requisição (corpo POST)

Parâmetro

Obrigatório

Descrição

token

Sim

Token de atualização a ser revogado.

client_id

Sim

ID do seu aplicativo nativo.

Uma requisição bem-sucedida retorna o status HTTP 200 OK.