Todos os produtos
Search
Central de documentação

API Gateway:Plugin OAuth

Última atualização: Jun 27, 2026

O plugin OAuth emite tokens de acesso OAuth 2.0 baseados em JSON Web Tokens (JWTs), em conformidade com a RFC 9068.

Tipo de plugin

Autenticação e autorização.

Configuração do plugin

Campos

Configuração de autorização

Campo

Tipo de dados

Obrigatório

Valor padrão

Descrição

consumers

array de objetos

Sim

-

Chamadores (consumers) autorizados a solicitar autenticação.

issuer

string

Não

Higress-Gateway

Emissor do JWT.

auth_path

string

Não

/oauth2/token

Sufixo do caminho para emissão de token. Garanta que a rota corresponda a este caminho. Se utilizar o gerenciamento de API, crie uma API com o mesmo caminho.

global_credentials

bool

Não

true

Defina se as credenciais emitidas em qualquer rota concedem acesso após a autenticação bem-sucedida do consumer.

auth_header_name

string

Não

Authorization

Cabeçalho da requisição que contém o JWT.

token_ttl

number

Não

7200

Tempo de vida do token após a emissão, em segundos.

clock_skew_seconds

number

Não

60

Tolerância de diferença de relógio permitida para verificação dos campos exp e iat do JWT, em segundos.

keep_token

bool

Não

true

Indica se o JWT deve ser mantido nas requisições encaminhadas ao backend.

global_auth

array de strings

Não (Obrigatório apenas para configurações no nível de instância)

-

Exclusivo do nível de instância. Se definido como true, a autenticação aplica-se a todas as rotas. Se definido como false, aplica-se apenas aos domínios e rotas configurados. Se não for definido, a autenticação aplica-se globalmente apenas quando não existirem configurações no nível de domínio ou rota.

Campos em consumers:

Campo

Tipo de dados

Obrigatório

Valor padrão

Descrição

name

string

Sim

-

Nome do consumer.

client_id

string

Sim

-

ID do cliente OAuth 2.0.

client_secret

string

Sim

-

Segredo do cliente OAuth 2.0.

Importante
  • Se uma rota corresponder a auth_path, a requisição não será encaminhada ao backend; em vez disso, a rota gera um token.

  • Caso global_credentials seja false, garanta que a rota com o plugin ativado não utilize correspondência exata. A coexistência com uma rota de correspondência por prefixo pode causar comportamento inesperado.

  • Para requisições autenticadas, um cabeçalho X-Mse-Consumer é adicionado para identificar o chamador.

(Opcional) Configuração de autorização

Campo

Tipo de dados

Obrigatório

Valor padrão

Descrição

allow

array de strings

Não (Obrigatório para configurações fora do nível de instância)

-

Aplicável apenas nos níveis de rota ou domínio. Especifica quais consumers podem acessar requisições correspondentes, permitindo controle de permissões granular.

Importante

As configurações de autorização e autenticação não podem coexistir na mesma regra.

Exemplos

Configuração de autorização no nível de rota

Aplique a seguinte configuração de plugin em route-a e route-b:

consumers:
- name: consumer1
  client_id: 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  client_secret: abcdefgh-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Com essa configuração, as credenciais emitidas por route-a não conseguem acessar route-b e vice-versa.

Para compartilhar credenciais entre rotas:

global_credentials: true
consumers:
- name: consumer1
  client_id: 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  client_secret: abcdefgh-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Configuração de autorização global e configuração de autenticação no nível de rota

A configuração a seguir ativa a autenticação JWT para rotas ou domínios específicos. Se um JWT corresponder a múltiplos JSON Web Key Sets (JWKSs), o primeiro consumer correspondente terá efeito.

Configuração no nível de instância:

global_auth: false
consumers:
- name: consumer1
  client_id: 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  client_secret: abcdefgh-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- name: consumer2
  client_id: 87654321-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  client_secret: hgfedcba-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Configuração para route-a e route-b:

allow:
- consumer1

Configuração para *.example.com e test.com:

allow:
- consumer2
Nota
  • route-a e route-b são rotas do gateway. Requisições correspondentes a essas rotas permitem apenas o consumer chamado consumer1.

  • *.example.com e test.com correspondem a nomes de domínio nas requisições. Requisições correspondentes a esses domínios permitem apenas o consumer chamado consumer2.

Ativar autenticação no nível do gateway

Ative a autenticação OAuth2 para todas as requisições do gateway:

global_auth: true
consumers:
- name: consumer1
  client_id: 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  client_secret: abcdefgh-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- name: consumer2
  client_id: 87654321-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  client_secret: hgfedcba-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Exemplos de requisição

Usar o tipo de concessão Client Credential

Obter um token de acesso

# Obtain an access token by using the GET method. We recommend that you use this method.
curl 'http://test.com/oauth2/token?grant_type=client_credentials&client_id=12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx&client_secret=abcdefgh-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

# Obtain an access token by using the POST method. To perform this operation, you need to match a route that points to a real destination service. Otherwise, the gateway does not read request bodies.
curl 'http://test.com/oauth2/token' -H 'content-type: application/x-www-form-urlencoded' -d 'grant_type=client_credentials&client_id=12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx&client_secret=abcdefgh-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

# Obtain the value of the access_token field from the response.
{
  "token_type": "bearer",
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImFwcGxpY2F0aW9uXC9hdCtqd3QifQ.eyJhdWQiOiJkZWZhdWx0IiwiY2xpZW50X2lkIjoiMTIzNDU2NzgteHh4eC14eHh4LXh4eHgteHh4eHh4eHh4eHh4IiwiZXhwIjoxNjg3OTUxNDYzLCJpYXQiOjE2ODc5NDQyNjMsImlzcyI6IkhpZ3Jlc3MtR2F0ZXdheSIsImp0aSI6IjEwOTU5ZDFiLThkNjEtNGRlYy1iZWE3LTk0ODEwMzc1YjYzYyIsInN1YiI6ImNvbnN1bWVyMSJ9.NkT_rG3DcV9543vBQgneVqoGfIhVeOuUBwLJJ4Wycb0",
  "expires_in": 7200
}

Usar o token de acesso para iniciar uma requisição

curl 'http://test.com' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6ImFwcGxpY2F0aW9uXC9hdCtqd3QifQ.eyJhdWQiOiJkZWZhdWx0IiwiY2xpZW50X2lkIjoiMTIzNDU2NzgteHh4eC14eHh4LXh4eHgteHh4eHh4eHh4eHh4IiwiZXhwIjoxNjg3OTUxNDYzLCJpYXQiOjE2ODc5NDQyNjMsImlzcyI6IkhpZ3Jlc3MtR2F0ZXdheSIsImp0aSI6IjEwOTU5ZDFiLThkNjEtNGRlYy1iZWE3LTk0ODEwMzc1YjYzYyIsInN1YiI6ImNvbnN1bWVyMSJ9.NkT_rG3DcV9543vBQgneVqoGfIhVeOuUBwLJJ4Wycb0'

Códigos de erro

Código de status HTTP

Mensagem de erro

Motivo

401

Invalid Jwt token.

O JWT está ausente, malformado ou expirado.

403

Access Denied.

O consumer não tem autorização para acessar esta rota.