Pular para o conteúdo principal

Proteger 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

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 que você precisará 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...

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​

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
exptimestamp do momento de expiração
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 uma ferramenta de decodificação de JWT 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​

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.