Autenticação/SSO
Introdução
O Front Niara/Central de Reservas pode ser integrado a um provedor de login que implementa o protocolo OAuth2. Essa feature pode ser usada para atender cenários como:
- Um colaborador de agência se autentica em outro sistema. Esse sistema exibe um botão/link que direciona ao Front Niara/Central de Reservas. O usuário já acessa o sistema logado, ou precisa completar um segundo fator de autenticação (preencher um código enviado para o e-mail). Mais importante, não precisa ter um novo username/senha.
Implantação
Integração com provedor de login OAuth2.0
Documentação de referência ao protocolo OAuth2.0: https://oauth.net/2/
Damos suporte ao fluxo de autorização por código (Authorization Code Flow).
Arquitetura da solução
A autenticação do usuário é feita com os seguintes passos.
- (Cliente) Usuário faz login no sistema do cliente
- (Cliente) Provedor de login gera um Código de Autorização
- (Cliente) Provedor de login redireciona usuário para a Central de Reservas/Front Niara, passando o Código de Autorização na URL (ex: https://meuexemplo.niara.tech/sso/auth?code=XXX&authenticationRuleId=YYY&identityProviderId=ZZZ)
- (Niara) Backend Niara faz solicitação ao Token Endpoint do backend de autenticação utilizando o Código de Autorização
- (Cliente) Backend de autenticação valida o Código de Autorização e gera um ID Token assinado
- (Niara) Backend Niara recebe ID Token assinado do Token Endpoint
- (Niara) Backend Niara valida a assinatura do ID Token com a chave pública do JWKS URI
- (Niara) Backend Niara busca ou cria cliente/usuário de acordo com as claims contidas no ID Token (nome, sobrenome, e-mail, CNPJ)
Pré requisitos
- O sistema de login do cliente precisa implementar os seguintes endpoints previstos no protocolo OAuth2.0
token_endpoint
: converte Código de Autorização em um ID Token e Access Token (precisamos só do ID Token)- Ver: https://developer.okta.com/blog/2018/04/10/oauth-authorization-code-grant-type#exchange-the-authorization-code-for-an-access-token
- O token precisa retornar os seguintes claims (além de claims do usuário, como nome e e-mail):
agencyid
: Id da agênciaagencyname
: Razão social da empresaagencybusinessname
: Nome fantasia da empresaagencycountry
: País da empresaagencydocument
: CNPJ/VATagencybackofficecode
: Código externo
jwks_uri
: retorna chaves públicas utilizadas na assinatura do ID Token. URL precisa ser no formato{issuer}/.well-known/jwks.json
- Cliente possui instalação Niara (ex: https://meuexemplo.niara.tech)
Configuração
- Cliente: No provedor de login externo, configurar um novo client
- Registrar url de redirecionamento autorizada (allowed callback URL): https://meuexemplo.admin.niara.tech/sso/auth
- Habilitar como escopos permitidos:
openid
,profile
,email
- Habilitar o Authorization Code Flow (não suportamos outros fluxos)
- Anotar os seguintes dados, necessários para as próximas etapas:
- Client ID
- Client Secret
- Endpoint para token (
token_endpoint
) - Endpoint para autorização (
authorization_endpoint
) - Endpoint para consulta às chaves jwks (
jwks_uri
)
- Niara: Cadastrar novo provedor de login
- Acessar https://meuexemplo.niara.tech/identityProviders/new
- Uso do login: Usuário de Cliente da Instalação
- Tipo de Cliente: Cliente Dinâmico
- Preencher campos Client ID, Cliente Secret, Endpoint para token, Endpoint de autorização e Endpoint para consulta às chaves jwks com os dados específicos fornecidos pelo cliente
- Niara: Cadastrar nova regra de autenticação
- Niara: Configurar a regra de autenticação nova para o motor correspondente ao motor
- Niara: Anotar authenticationRuleId e identityProviderId