Ir para o conteúdo

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:

  1. Autenticar um JWT.
  2. 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:

  1. Autenticar o usuário.
  2. Gerar um JWT.
  3. 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.