Pular para o conteúdo principal

Proteja sua API

Se você não precisa de políticas de controle de acesso flexíveis e granulares, pode simplesmente proteger sua API diretamente. Vamos guiá-lo através de um diagrama de sequência e os passos necessários para mostrar como integrar o controle de acesso em seu aplicativo.

Neste tutorial

  • Endpoint do Logto: https://tenant-id.logto.app
  • Aplicativo cliente: https://client.example.org
  • Servidor de recursos da API: https://resource-server.com/api

Você deve substituir esses pelos seus endpoints reais ao implementar.

Solicitação de autenticação

Forneça uma lista de parâmetros de indicador de recurso em uma Solicitação de Autenticação. Isso indicará todos os recursos protegidos que o usuário pode solicitar.

GET https://tenant-id.logto.app/oidc/auth?response_type=code
&client_id=s6BhdRkqt3
&state=tNwzQ87pC6llebpmac_IDeeq-mCR2wLDYljHUZUAWuI
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&resource=https%3A%2F%2Fresource-server.com%2Fapi
&scope=read%20write

O Logto validará e armazenará esses indicadores de recurso. Um authorization_code será concedido e retornado com escopos restritos a esses recursos especificados.

Exemplo de configuração do Logto SDK:

const config: LogtoConfig = {
// ...outras configurações
resources: ['https://resource-server.com/api'],
scopes: ['read', 'write'],
};

Solicitação de token

Quando o parâmetro de recurso está presente em uma Solicitação de Token junto com o authorization_code concedido acima, ele especificará o público do recurso de API alvo do token de acesso solicitado.

POST https://tenant-id.logto.app/oidc/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb&code=10esc29BWC2qZB0acc9v8zAv9ltc2pko105tQauZ&resource=https%3A%2F%2Fresource-server.com%2Fapi

Um token de acesso criptografado com o público restrito a este recurso solicitado será concedido pelo Logto. O token carrega todos os dados necessários para representar o status de autorização da solicitação. Por exemplo, a identidade e o papel do usuário da solicitação, o público do token e o tempo de expiração.

Exemplo de código do Logto SDK:

const accessToken = await logtoClient.getAccessToken('https://resource-server.com/api');

O payload do accessToken conterá:

{
iss: '<your-logto-endpoint>/oidc',
aud: 'https://resource-server.com/api',
scope: 'read write'
}

Solicitação ao recurso de API

O usuário cliente enviou uma solicitação ao Recurso de API apresentando o access_token fornecido no cabeçalho de Autorização.

GET https://resource-server.com/api/users
Authorization: Bearer eyJhbGciOiJIUz...

O Logto segue o protocolo padrão de autorização baseado em token para proteger seus Recursos de API. Para saber mais sobre OAuth 2.0, consulte o documento oficial do OAuth 2.0.

Validar tokens de autorização para solicitações de API

O Logto emite um token de autorização no formato padrão JWT para cada solicitação de API autorizada. O token é criptografado e assinado como um token JWS.

Entendendo o token JWS

Um token JWS codificado é construído com três partes:

  • Cabeçalho JOSE: Declara o tipo de código e o algoritmo de codificação
  • Payload JWS: Inclui todas as reivindicações do token
  • Assinatura JWS: Assinatura assinada com JWK

Um esquema padrão do Payload JWS emitido pelo Logto: (as reivindicações podem variar, com base na sua configuração OIDC personalizada)

chavedescrição
jtiID único do JWT
subsujeito, geralmente user-id
iattimestamp do momento de emissão do token
exptimestamp do momento de expiração do token
client_idid do aplicativo
issidentidade do emissor do token
audpúblico do token
scopeescopos (permissões) do token
nota

Para desenvolvimento, para inspecionar visualmente um token JWT, você pode visitar jwt.io para decodificar e verificar os tokens que você recebeu. Tenha cuidado ou nunca use os tokens de um ambiente de produção. Como este é um serviço online público fornecido por terceiros, seu token pode ser exposto.

Validar o token de autorização

  1. Validando um JWT
  2. Validando a assinatura JWS
  3. O emissor do token é https://<your-logto-domain>/oidc (emitido pelo seu servidor de autenticação Logto)
  4. O público do token é igual ao indicador de recurso do receptor atual registrado no Logto Admin Console
  5. O token está dentro do seu tempo de expiração
  6. (Somente RBAC) O token possui o scope desejado

Existem várias bibliotecas e pacotes de código aberto que podem ajudá-lo a validar e decodificar um token JWT facilmente. Você pode escolher um e integrá-lo ao seu aplicativo backend com base na linguagem e framework que está usando. Por favor, confira alguns dos exemplos que temos:

Referência

O Logto usa o Protocolo de Autorização OAuth 2.0 baseado em código para tornar sua solicitação de API segura. Se você estiver interessado na estratégia por trás disso, consulte a especificação do OAuth 2.0 para mais detalhes.