Provedor de Segurança - JWT SSO
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 assine um usuário App Builder. Isso é obtido 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 por App Builder.
- Serviço de logon único - Hospedado por um serviço externo confiável.
Serviço de Autenticação
O serviço de autenticação é responsável por:
- Autenticar um JWT.
- Assinar o usuário em App Builder.
Exemplo:
https://example.com/App Builder/signin-{Provider}
Onde {Provider}
é o App Builder nome do provedor de segurança. 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 relativo. Opcional.
JWT
O jwt
o parâmetro contém o JSON Web Token. Os 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 reivindicações registradas.
Reivindicação | Nome | Tipo | Finalidade |
---|---|---|---|
iss | Emissor | StringOrURI | App Builder corresponderá o emissor ao emissor configurado pelo provedor de segurança, realizando uma comparação que diferencia maiúsculas de minúsculas. |
sub | Assunto | StringOrURI | App Builder corresponderá ao assunto an App Builder conta de usuário. |
aud | Público | URI | App Builder corresponderá o público ao público configurado do provedor de segurança. Exemplo: https://example.com/App Builder |
exp | Tempo de expiração | Data Numérica | App Builder validará que a data de expiração é menor que a data atual, levando em consideração o desvio do relógio. |
nbf | Não antes | NumericDate | App Builder validará que a data e a hora atuais são maiores que o valor Não Antes, levando em consideração a distorção do relógio. |
iat | Emitido em | Data Numérica | App Builder usará o valor Emitido em para determinar a idade do JWT. App Builder limitará a janela na qual um token é aceito para, por exemplo, 5 minutos. |
jti | ID JWT | Data Numérica | App Builder usará o ID JWT para evitar ataques de repetição. |
As reivindicaçõ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 acontece com todos App Builder provedores de segurança, as reivindicações podem ser:
- Usado para provisionar contas de usuário e fornecer associação a grupos de segurança
- Mapeado para propriedades da conta de usuário, como nome de usuário, endereço de email ou número de telefone.
- Acessado por regras de negócios usando o mvSQL
claim()
função de tempo de execução.
Exemplo de uma payload JWT:
{
"jti": "918b6e73-400d-479c-baa1-8e12f5fd78f4",
"iss": "example.com",
"aud": "https://example.com/App Builder",
"sub": "Arthurd.Dent",
"iat": 1652473593,
"exp": 1652473893,
"groups": [
"Users",
"Employees",
"Sales"
]
}
Retornar_para
O return_to
parâmetro consiste em um URI. O URI é relativo ao App Builder diretório raiz do aplicativo. Ele deve ser prefixado com uma barra inicial.
Exemplo:
/app/Sales/Leads?LeadId=1234
App Builder validará o URI para proteger contra ataques de redirecionamento aberto.
Métodos
Publicar
Por padrão, o endpoint de autenticação aceitará uma postagem de formulário:
POST /App Builder/signin-JWTSSO HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
jwt={jwt}&return_to={return_to}
Pegar
Como alternativa, o endpoint de autenticação também pode ser configurado para aceitar GET
solicitações:
GET /App Builder/signin-JWTSSO?jwt={jwt}&return_to={return_to} HTTP/1.1
Host: example.com
Ao usar o GET
método, o token de segurança JWT é passado na string de consultar da URL.
Considere o seguinte antes de usar GET
:
GET
representa um risco adicional, pois as strings de consultar 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 vizinhança de 2.000 caracteres. Isso pode ser mitigado limitando o número de claims.
- O
return_to
parâmetro pode conter valores codificados em URL duplo. Tais solicitações podem ser bloqueadas por firewalls.
Serviço de Login Único
O Serviço de Logon Único é o endpoint que App Builder redirecionará os usuários para quando um desafio for emitido. O Serviço de Logon Único é responsável por:
- Autenticando o usuário.
- Gerando um JWT.
- Redirecionando 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 aparece na URL do Serviço de Autenticação. Ele também pode aparecer no formulário de login.
- Tipo: JWT SSO
Fichas
- Audience: Audiência. URI. Usado para validar o JWT
aud
reivindicação. Exemplo:https://example.com/App Builder
. - Issuer: Nome do emissor. String, URI recomendado. Usado para validar o JWT
iss
reivindicação. Diferencia maiúsculas de minúsculas.
Endpoints
Tipo | Descrição |
---|---|
Serviço de logon único | Local para onde os usuários serão redirecionados quando um desafio for emitido para o provedor de segurança JWT SSO. URI absoluto opcional. |
Certificados
Uso | Tipo | Descrição |
---|---|---|
Validação de assinatura | Certificado X.509 | Chave pública RSA Usada para validar a assinatura 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 HTTP GET solicitações. |
ClockSkew | 5 | Número de minutos. Inteiro positivo. Usado ao validar o JWT iat , nbf e exp reivindicações. |
MaxLifetime | 5 | Número de minutos. Inteiro positivo. Usado para validar o iat reivindicar |
SigningAlgorithm | RS256 | Algoritmo de assinatura JWT RS256 é o único algoritmo suportado atualmente. |