Provedor de segurança JWT SSO no Jitterbit App Builder
O provedor de segurança JWT SSO é uma implementação de um protocolo de autenticação única (SSO) personalizado. O protocolo permite que um serviço confiável faça o login de um usuário no App Builder. Isso é alcançado gerando um Token Web JSON (JWT) e passando o token para um endpoint de autenticação por meio de um redirecionamento do navegador do cliente.
Protocolo
O protocolo JWT SSO aproveita os seguintes padrões:
Endpoints
O protocolo JWT SSO define dois endpoints de serviço.
- Serviço de Autenticação - Hospedado pelo App Builder.
- Serviço de Autenticação Única - Hospedado pelo serviço confiável de terceiros.
Serviço de autenticação
O serviço de autenticação é responsável por:
- Autenticar um JWT.
- Fazer o login do usuário no App Builder.
Exemplo:
https://example.com/Vinyl/signin-{Provider}
Onde {Provider}
é o nome do provedor de segurança do App Builder. Veja Configuração.
Parâmetros
O endpoint do serviço de autenticação define os seguintes parâmetros:
jwt
– JSON Web Token. Obrigatório.return_to
– URI relativa. Opcional.
JWT
O parâmetro jwt
contém o JSON Web Token. JWTs são seguros para URL, portanto, nenhuma codificação adicional é necessária.
Os JWTs devem atender aos seguintes requisitos:
- O JWT deve ser assinado usando o algoritmo RS256 (RSA, SHA-256).
- O JWT não deve ser criptografado.
- O JWT deve incluir as seguintes declarações registradas.
Declaração | Nome | Tipo | Propósito |
---|---|---|---|
iss |
Emissor | StringOrURI | O App Builder irá comparar o emissor com o emissor configurado do provedor de segurança, realizando uma comparação que diferencia maiúsculas de minúsculas. |
sub |
Assunto | StringOrURI | O App Builder irá comparar o assunto com uma conta de usuário do App Builder. |
aud |
Público | URI | O App Builder irá comparar o público com o público configurado do provedor de segurança. Exemplo: https://example.com/Vinyl |
exp |
Tempo de Expiração | NumericDate | O App Builder irá validar que a data de expiração é anterior à data atual, levando em conta a diferença de horário. |
nbf |
Não Antes | NumericDate | O App Builder irá validar que a data e hora atuais são maiores do que o valor de Não Antes, levando em conta a diferença de horário. |
iat |
Emitido Em | NumericDate | O App Builder irá usar o valor Emitido Em para determinar a idade do JWT. O App Builder limitará a janela em que um token é aceito para, por exemplo, 5 minutos. |
jti |
ID do JWT | NumericDate | O App Builder irá usar o ID do JWT para prevenir ataques de repetição. |
Os claims registrados do JWT são descritos na Seção 4.1 do padrão JSON Web Token.
O JWT pode conter claims adicionais. Assim como em todos os provedores de segurança do App Builder, os claims podem ser:
- Usados para provisionar contas de usuário e fornecer associação a grupos de segurança
- Mapeados para propriedades da conta do usuário, como nome de usuário, endereço de email ou número de telefone.
- Acessados por regras de negócios usando a função de tempo de execução
claim()
do mvSQL.
Exemplo de um payload JWT:
{
"jti": "918b6e73-400d-479c-baa1-8e12f5fd78f4",
"iss": "example.com",
"aud": "https://example.com/Vinyl",
"sub": "Arthurd.Dent",
"iat": 1652473593,
"exp": 1652473893,
"groups": [
"Users",
"Employees",
"Sales"
]
}
return_to
O parâmetro return_to
consiste em uma URI. A URI é relativa ao diretório raiz da aplicação App Builder. Deve ser precedida por uma barra inicial.
Exemplo:
/app/Sales/Leads?LeadId=1234
O App Builder validará a URI para proteger contra ataques de redirecionamento aberto.
Métodos
Post
Por padrão, o endpoint de autenticação aceitará um post de formulário:
POST /Vinyl/signin-JWTSSO HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
jwt={jwt}&return_to={return_to}
Get
Como alternativa, o endpoint de autenticação também pode ser configurado para aceitar requisições GET
:
GET /Vinyl/signin-JWTSSO?jwt={jwt}&return_to={return_to} HTTP/1.1
Host: example.com
Ao usar o método GET
, o token de segurança JWT é passado na string de consulta da URL.
Considere o seguinte antes de usar GET
:
GET
apresenta um risco adicional, pois as strings de consulta são frequentemente gravadas em arquivos de log do servidor web. Isso pode ser mitigado garantindo que os tokens de segurança tenham uma vida útil curta e não possam ser reproduzidos.- URLs estão sujeitas a restrições de comprimento, tipicamente na ordem de 2.000 caracteres. Isso pode ser mitigado limitando o número de claims.
- O parâmetro
return_to
pode conter valores codificados em URL duplamente. Esse tipo de requisições pode ser bloqueado por firewalls.
Serviço de autenticação única
O Serviço de Autenticação Única é o endpoint para o qual o App Builder redirecionará os usuários quando um desafio for emitido. O Serviço de Autenticação Única é responsável por:
- Autenticar o usuário.
- Gerar um JWT.
- Redirecionar o usuário para o Serviço de Autenticação.
O endpoint do Serviço de SSO (Single Sign-On) é opcional.
Configuração
Configurações
- Nome: Nome do provedor de segurança. O nome aparece na URL do Serviço de Autenticação. Também pode aparecer no formulário de login.
- Tipo: JWT SSO
Tokens
- Público: Público. URI. Usado para validar a reivindicação
aud
do JWT. Exemplo:https://example.com/Vinyl
. - Emissor: Nome do emissor. String, URI recomendado. Usado para validar a reivindicação
iss
do JWT. Sensível a maiúsculas e minúsculas.
Endpoints
Tipo | Descrição |
---|---|
Serviço de SSO | Localização para a qual os usuários serão redirecionados quando um desafio for emitido para o provedor de segurança JWT SSO. Opcional, URI absoluto. |
Certificados
Uso | Tipo | Descrição |
---|---|---|
Validação de Assinatura | Certificado X.509 | Chave Pública RSA usada para validar a assinatura do JWT. |
Propriedades
O provedor de segurança OAuth suporta os seguintes parâmetros adicionais:
Parâmetro | Padrão | Descrição |
---|---|---|
AllowHttpGet | False | Indica que o endpoint de autenticação deve permitir requisições HTTP GET . |
ClockSkew | 5 | Número de minutos. Inteiro positivo. Usado ao validar as reivindicações iat , nbf e exp do JWT. |
MaxLifetime | 5 | Número de minutos. Inteiro positivo. Usado para validar a reivindicação iat |
SigningAlgorithm | RS256 | O algoritmo de assinatura JWT RS256 é o único algoritmo atualmente suportado. |