O que é público (audience)?
No contexto de Autenticação (Authentication, AuthN) e Autorização (Authorization) , público (audience) é um componente chave que define os destinatários pretendidos de um token de autorização. Referido como a claim aud em JSON Web Token (JWT) , esta claim garante que o token é aceito apenas pelo serviço ou aplicação designada. Tipicamente, a claim de público contém ou o client_id da aplicação para a qual o token é destinado ou um URL representando a API ou recurso que o token está autorizado a acessar. Ao especificar o público, serve como um controle de segurança para prevenir o uso indevido por serviços ou usuários não autorizados.
Como funciona o público (audience)?
Quando um cliente solicita um Token de acesso (Access token) de um authorization server (servidor de autorização), a claim de público é incluída na resposta do token. Este valor de público é então validado pelo resource server (servidor de recursos) quando o token é apresentado. O resource server verifica se a claim de público no token corresponde ao seu próprio identificador ou ao identificador do serviço que está protegendo. Se não corresponder, o token será rejeitado, aumentando a segurança em sistemas distribuídos, particularmente em cenários que envolvem múltiplos microsserviços ou APIs. Ao controlar a claim de público, os desenvolvedores podem garantir que os tokens sejam usados no contexto correto, adicionando uma camada adicional de proteção aos fluxos de authentication (autenticação) e authorization (autorização) da sua aplicação.
- Solicitante: A aplicação cliente especifica o valor de público ao solicitar um token.
- Emissor: O authorization server inclui a claim de público na resposta do token.
- Verificador: O destinatário do token verifica a claim de público contra o seu próprio identificador. Se a claim de público corresponder ao identificador do destinatário, o token é considerado válido. Caso contrário, é rejeitado.
Exemplo de público (audience) em JWT
Claim de público num ID token de OpenID Connect (OIDC)
{
"header": {
"alg": "RS256",
"typ": "JWT",
"kid": "abc123"
},
"payload": {
"iss": "https://auth.logto.io",
"sub": "test_user",
"aud": "client_id_foo",
"exp": 1516239022,
"iat": 1516239022,
"nonce": "n-0S6_WzA2Mj",
"primary_email": "[email protected]",
"email_verified": true,
"username": "foo"
},
"signature": "..."
}
Um Token de ID (ID token) em OpenID Connect (OIDC) é um token de segurança que contém informações sobre o usuário autenticado, entregue à aplicação cliente após uma autenticação bem-sucedida. Ao contrário dos access tokens, que são usados para conceder permissão para acessar recursos, os ID tokens são especificamente projetados para transmitir informações de identidade do usuário à parte confiável (cliente). Esses tokens são tipicamente codificados como JWTs e incluem claims como o identificador do usuário (claim sub), o emissor (claim iss) e o público (claim aud), entre outros.
Neste caso, a claim aud
especifica o público pretendido para o ID token, que é a aplicação cliente. O valor da claim aud
geralmente corresponde ao client_id
da aplicação que solicitou o token. Quando a aplicação cliente recebe o ID token, pode verificar a claim de público para garantir que o token foi emitido para seu consumo. Este passo de validação ajuda a prevenir o uso indevido do token e o acesso não autorizado a informações do usuário, melhorando a segurança do processo de autenticação.
Claim de público num access token
{
"header": {
"alg": "RS256",
"typ": "JWT",
"kid": "abc123"
},
"payload": {
"iss": "https://auth.logto.io",
"sub": "test_user",
"aud": "https://example.logto.app/api/users",
"exp": 1516239022,
"iat": 1516239022,
"scope": "read write",
"client_id": "client_id_foo"
},
"signature": "..."
}
Ao contrário do ID token, Token de acesso (Access token) são usados para autorizar o acesso a recursos protegidos, como APIs ou serviços. A claim aud
num access token especifica o destinatário pretendido do token, que é tipicamente a API ou serviço que o token está autorizado a acessar. Tipicamente, o resource server que hospeda a API tem um domínio diferente da aplicação cliente que solicitou o token. Neste caso, em vez de um client_id
, a claim aud
contém o URL do endpoint da API para o qual o token é destinado. Este URL é frequentemente conhecido como o resource indicator ou identificador da API que identifica unicamente o recurso alvo.
Quando o resource server recebe um access token, valida a claim aud
para garantir que o token é destinado ao seu consumo. Ao verificar o público, o resource server pode prevenir o acesso não autorizado aos seus recursos e aplicar políticas de access control baseadas no público pretendido do token. Este mecanismo ajuda a proteger dados sensíveis e garante que os access tokens sejam usados no contexto apropriado, melhorando a segurança do sistema como um todo.
FAQs
Por que a claim de público é importante na validação de tokens?
A claim de público é crucial na validação de tokens porque garante que o token seja aceito apenas pelo destinatário pretendido. Ao verificar a claim de público, o destinatário pode prevenir o uso indevido do token e o acesso não autorizado a recursos. Este controle de segurança é particularmente importante em sistemas distribuídos onde múltiplos serviços interagem entre si, pois ajuda a aplicar políticas de access control e proteger dados sensíveis.
Um token pode ter múltiplos públicos?
Por razões de segurança, é recomendado que um token tenha um único público para prevenir ambiguidades e garantir que o token seja usado no contexto correto. No entanto, alguns cenários podem exigir tokens com múltiplos públicos, como quando um token é destinado a múltiplos serviços ou APIs dentro do mesmo domínio. Nesses casos, os desenvolvedores devem considerar cuidadosamente as implicações do uso de tokens com múltiplos públicos e implementar medidas de segurança apropriadas para mitigar riscos potenciais.
O que devo usar como meu identificador de API na claim de público?
Ao especificar a claim de público num access token que representa uma API ou serviço, é recomendado usar um URI absoluto que identifique unicamente o recurso. Este URI pode ser o URL base do endpoint da API ou um caminho específico de recurso que o token está autorizado a acessar. Ao usar um URI como identificador de API, você pode garantir que a claim de público seja inequívoca e represente com precisão o destinatário pretendido do token.