Provedor de segurança JWT SSO no Jitterbit App Builder
O provedor de segurança JWT SSO é uma implementação de um protocolo de logon único (SSO) personalizado. O protocolo permite que um serviço confiável faça login de um usuário no App Builder. Isso é feito gerando um JSON Web Token (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 Logon Único - Hospedado pelo serviço terceirizado confiável.
Serviço de autenticação
O serviço de autenticação é responsável por:
- Autenticar um JWT.
- Fazer login do usuário no App Builder.
Exemplo:
https://example.com/Vinyl/signin-{Provider}
Onde {Provider} é o esquema do provedor de segurança do App Builder. Consulte 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 | Finalidade |
|---|---|---|---|
iss |
Issuer | StringOrURI | O App Builder fará correspondência do emissor com o emissor configurado do provedor de segurança, realizando uma comparação sensível a maiúsculas e minúsculas. |
sub |
Subject | StringOrURI | O App Builder fará correspondência do assunto com uma conta de usuário do App Builder. |
aud |
Audience | URI | O App Builder fará correspondência do público com o público configurado do provedor de segurança. Exemplo: https://example.com/Vinyl |
exp |
Expiration Time | NumericDate | O App Builder validará que a data de expiração é anterior à data atual, levando em conta a defasagem de relógio. |
nbf |
Not Before | NumericDate | O App Builder validará que a data e hora atuais são posteriores ao valor Not Before, levando em conta a defasagem de relógio. |
iat |
Issued At | NumericDate | O App Builder usará o valor Issued At para determinar a idade do JWT. O App Builder limitará a janela em que um token é aceito, por exemplo, 5 minutos. |
jti |
JWT ID | NumericDate | O App Builder usará o JWT ID para evitar ataques de repetição. |
As declarações registradas do JWT são descritas na Seção 4.1 do padrão JSON Web Token.
O JWT pode conter declarações adicionais. Como com todos os provedores de segurança do App Builder, as declarações podem ser:
- Usadas para provisionar contas de usuário e fornecer associação a grupos de segurança
- Mapeadas para propriedades de conta de usuário, como nome de usuário, endereço de email ou número de telefone.
- Acessadas por regras de negócio usando a função de tempo de execução
claim()do mvSQL.
Exemplo de carga útil de 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 prefixada com uma barra inicial.
/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 formulário enviado por post:
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:
GETapresenta risco adicional, pois 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 em torno de 2.000 caracteres. Isso pode ser mitigado limitando o número de claims.
- O parâmetro
return_topode conter valores com URL dupla codificada. Tais requisições podem ser bloqueadas por firewalls.
Serviço de logon único
O Serviço de Logon Único é o endpoint para o qual o App Builder redirecionará os usuários quando um desafio for emitido. O Serviço de Logon Único é 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 Logon Único é opcional.
Configuração
Configurações
- Nome: Nome do provedor de segurança. O nome pode aparecer no formulário de login.
- Esquema: Esquema do provedor de segurança. O esquema aparece na URL do Serviço de Autenticação.
- Tipo: JWT SSO
Tokens
- Audience: Audience. URI. Usado para validar o claim
auddo JWT. Exemplo:https://example.com/Vinyl. - Issuer: Nome do emissor. String, URI recomendada. Usado para validar o claim
issdo JWT. Sensível a maiúsculas e minúsculas.
Endpoints
| Tipo | Descrição |
|---|---|
| Serviço de Logon Único | Local para o qual os usuários serão redirecionados quando um desafio for emitido para o provedor de segurança JWT SSO. Opcional, URI absoluta. |
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 os claims iat, nbf e exp do JWT. |
| MaxLifetime | 5 | Número de minutos. Inteiro positivo. Usado para validar o claim iat |
| SigningAlgorithm | RS256 | Algoritmo de assinatura JWT RS256 é o único algoritmo atualmente suportado. |