O que é um JWT?
Um JSON Web Token (JWT) é um formato de token criptografado que transfere dados de forma segura, como credenciais de autenticação e autorização, entre duas aplicações. No Document360, o JWT é usado para autenticar logins de leitores. Clique aqui para ler sobre a JWT.
O Document360 utiliza uma abordagem semelhante ao PKCE (Proof Key for Code Exchange, um método OAuth seguro) para gerar o token JWT.
SSO empresarial usando JWT no Document360
O Document360 suporta JWT como um de seus métodos SSO (Single Sign-On) para autenticar logins de leitores. Ele oferece uma forma segura de transferir dados de autenticação e autorização entre sua aplicação e sua base de conhecimento Document360Knowledge base.
Você pode criar até 5 configurações de JWT por projeto. Até 3 deles podem aparecer como botões de login na página voltada para o leitor. Se você tiver mais de 3, os leitores ainda podem acessar as configurações restantes digitando seu nome de domínio no campo de entrada de nome de domínio na página de login.
O JWT também trabalha junto com provedores de SSO como SAML e OpenID, você pode ter todos ativos no mesmo projeto ao mesmo tempo.
Escolhendo o método certo de SSO: JWT vs SAML vs OpenID
O Document360 suporta três opções SSO para autenticação de leitor: JWT, SAML e OpenID Connect. Escolher o método certo depende de como você gerencia os usuários, qual infraestrutura você já possui e quanto controle você precisa sobre o processo de login.
A tabela abaixo compara o JWT com as outras opções:
Característica | JWT | SAML / OpenID |
|---|---|---|
Gestão de leitores | Os leitores são autenticados a partir do seu próprio aplicativo. Você não precisa criar ou gerenciar contas de leitor manualmente no portal Document360. | Os leitores são gerenciados pelo provedor de identidade (IdP) da sua organização, como Okta, Azure AD ou Google Workspace. |
Destino de login | Os logins do JWT sempre redirecionam para o site da base de conhecimento. Mesmo que o usuário seja membro da equipe, ele não pode acessar o portal Document360 usando o JWT. | Pode suportar logins tanto do leitor quanto da equipe, dependendo da configuração. |
Quando usar | Ideal se você não tem IDP ou prefere gerenciar a autenticação no seu próprio app. | Recomendado se sua organização já usa um IdP e quer autenticação centralizada e controle de acesso. |
Fluxo de registro de usuários | Você controla o login e o provisionamento do usuário no seu próprio app. | Pode suportar recursos como auto-registro, redefinição de senha e gerenciamento do ciclo de vida do usuário (dependendo do IDP). |
Página de login do SSO | Você define a URL de login e, opcionalmente, a URL de desconexão nas configurações do JWT. | A página de login é gerenciada pelo IDP, e os redirecionamentos são gerenciados por meio das configurações SAML/OpenID. |
Recursos avançados | Alguns recursos não são suportados pelo JWT, como: – Leitores SSO com registro automático – Pulando a página comum de login do Document360 – Auto-registro do leitor | Esses recursos avançados estão disponíveis dependendo das capacidades do IdP. |
Implementação | Configuração mais simples para desenvolvedores. Você gera o JWT, assina usando um cliente secreto criado no Document360 e gerencia a autenticação no seu app. | Requer configuração de metadados IdP, certificados e mapeamentos com o Document360. |
Como funciona a autenticação JWT
O diagrama de alto nível abaixo mostra como alcançar o fluxo de autenticação JWT no Document360.

Os passos abaixo explicam o fluxo completo de autenticação JWT no Document360 para desenvolvedores que configuram o SSO do leitor usando seu próprio sistema de login.
Terminologia chave
Mandato | Descrição |
|---|---|
Login URL | Uma página pública de login no seu aplicativo onde os usuários são redirecionados para autenticar. |
URL de geração de código | Endpoint backend seguro no seu app que envia dados do usuário para o Document360 para obter um código de autorização. |
URL de retorno de chamada | A URL no Document360 onde seu app redireciona o usuário após receber o código de autorização. Isso é gerado automaticamente pelo Document360. |
Fluxo de autenticação
O usuário acessa a base de conhecimento privada
Quando um usuário tenta acessar seu site de base de conhecimento, o Document360 detecta que o SSO do JWT está ativado e redireciona o usuário para a URL de Login configurada nas configurações do JWT.
Usuário faz login na sua aplicação
Se o usuário ainda não estiver autenticado, sua página de login cuida da autenticação dele.
Seu backend solicita um código de autenticação único
Após o login do usuário, seu backend envia uma
POSTrequisição para a URL de geração de código configurada no Document360 com o seguinte:Identidade do usuário (por exemplo, nome, e-mail)
Opcional
readerGroupIdstokenValidityem minutos
Essa solicitação deve ser autorizada usando HTTP Basic Auth com seu ID de Cliente e Secret do Cliente.
Cabeçalho de Autorização de Exemplo
Authorization: Basic Base64Encode(clientId:clientSecret)Exemplo de Carga Útil JSON
{
"username": "firstname + lastname",
"firstName": "firstname",
"lastName": "lastname",
"emailId": "user email",
"readerGroupIds": ["Obtain from Reader groups overview page in the Document360 portal (Optional)"],
"tokenValidity": 15 //minutes
}NOTA
Garanta a sintaxe JSON correta para evitar erros de configuração.
O servidor Document360 Identity retorna um código de autenticação
Se a solicitação for válida, o servidor de identidade do Document360 gera um código de autorização de uso único e o envia de volta para seu app (backend).
Seu app redireciona o usuário de volta para o Document360
Seu backend adiciona o código à URL de Callback e redireciona o usuário para ele.
Por exemplo:
https://yourproject.document360.io/jwt/authorize?code=xyz
NOTA
O código de autenticação é um código de uso único e não pode ser reutilizado.
O Document360 valida o código
Uma vez que recebe o código, o Document360 o envia para o servidor de identidade via backchannel para trocá-lo por um token JWT.
Sessão de leitura é criada
O Document360 extrai informações do usuário e regras de acesso (baseadas em
readerGroupIds) do token.Uma sessão é criada para o leitor, concedendo-lhe acesso a categorias, idiomas ou versões permitidas.
Validade do token e comportamento de sessão
Você pode definir a duração da sessão usando o
tokenValiditycampo na carga útil (mínimo: 5 minutos, máximo: 1440).Uma vez que o token expira:
O leitor é redirecionado de volta para a URL de Login.
Se o usuário ainda estiver autenticado no seu app, um novo código é gerado e a sessão é restabelecida de forma fluida.
Configurando JWT no Document360
Configure a autenticação JSON Web Token (JWT) para permitir que os leitores façam login de forma segura usando tokens do seu aplicativo ou provedor de identidade. Você pode criar até 5 configurações de JWT por projeto, com até 3 exibidos como botões de login na página do leitor para acesso rápido. Opções adicionais do JWT permanecem acessíveis pelo campo Nome de Domínio. O JWT trabalha perfeitamente junto com provedores SSO como SAML e OpenID, permitindo que múltiplos métodos de autenticação coexistam no mesmo projeto.
Para acessar a página do JWT, navegue até Configurações > Usuários e permissões > JWT.
.png)
Novidade no JWT no Document360
Se não houver nenhuma configuração de JWT no seu projeto, complete os seguintes passos em ordem:
Configure login no JWT — configure configurações compartilhadas em nível de projeto.
Crie uma configuração de JWT — adicione sua primeira configuração de JWT.
Configure sua aplicação — conecte-a ao Document360.
Configurações adicionais de JWT e provedores SSO (SAML ou OpenID) podem ser adicionados ao mesmo projeto a qualquer momento sem afetar configurações existentes.
Configuração existente do JWT
Se você configurou o JWT antes de junho de 2026, sua configuração atual aparece em uma visualização somente leitura. Sua configuração atual do JWT permanece ativa, e os leitores podem continuar fazendo login sem interrupções.
Quando você navega até Configurações > Usuários e Permissões > JWT, você pode:
Continue usando a configuração: Não são necessárias alterações.
Editar a configuração: Clique no ícone Editar para atualizar as configurações.
Exclua a configuração: Clique no ícone Excluir para removê-la.
Adicionar outra configuração JWT
Clique em Criar JWT para adicionar uma nova configuração. Siga configurando login JWT e crie configuração JWT para criar configurações adicionais de JWT. Um projeto pode ter até 5 configurações de JWT. Após salvar, a página muda para a visualização de lista e exibe todas as entradas configuradas do JWT. Sua configuração atual permanece inalterada
Configure SSO junto com o JWT
Vá em Configurações > Usuários e Permissões > Configuração de SSO e configure seu provedor SSO. Sua configuração do JWT não é afetada em nada. Ambos estarão ativos ao mesmo tempo e os leitores verão ambas as opções na página de login. Veja a coexistência entre JWT e SSO para detalhes sobre como é a página de login.
Passo 1 — Configurar o login do JWT
Clique em Configurar login JWT no banner da página do JWT para abrir o modal de configuração.

Autenticação
Esses são valores somente leitura gerados pelo Document360. Copie usando o botão Copiar e configure-os no seu provedor de identidade.
Campo | Descrição |
|---|---|
URL de retorno de chamada | A URL de redirecionamento onde o provedor de identidade envia leitores após a autenticação bem-sucedida. Registre isso no seu IDP para completar o processo de login. |
URL de geração de código | O endpoint Document360 chama para recuperar o token usado para iniciar sessão nos leitores. |
Outros cenários
Login direto do JWT
Padrão: LIGADO
Quando ativados, os leitores são redirecionados diretamente para o login do JWT sem que apareça uma tela de seleção de login. Isso é apropriado quando o JWT é o único método de autenticação para sua base de conhecimento.
Quando desativado, os leitores recebem uma tela de seleção de login mostrando todas as opções de login configuradas — JWT, SSO e o login padrão do Document360. Desative essa configuração quando múltiplos métodos de autenticação estiverem ativos e os leitores precisarem escolher seu método de login. É necessária uma confirmação antes que essa mudança seja aplicada.
Quando múltiplas configurações de JWT e SSO estão configuradas, mas o dono do projeto quer que os leitores entrem apenas via autenticação JWT, eles podem ativar o login direto do JWT.
Desabilitar a página padrão de login
Padrão: DESLIGADO
Quando ativado, o login padrão de e-mail e senha do Document360 fica oculto. Leitores só podem se autenticar por meio de provedores JWT ou SSO configurados. Isso é tipicamente usado em ambientes empresariais, onde todo acesso dos leitores deve ser controlado por meio de um sistema centralizado de identidade.
NOTA
Ative essa configuração somente após a autenticação JWT ou SSO estar totalmente configurada e testada. Se o provedor externo de autenticação estiver configurado incorretamente, os leitores não poderão acessar a base de conhecimento.
Clique em Fechar para descartar o modal. As mudanças são aplicadas imediatamente.
Passo 2 — Criar uma configuração JWT
Na página do JWT, clique em Criar JWT no canto superior direito. O modal Create JWT abre.

Nome
Insira um nome descritivo para identificar essa configuração – por exemplo, SSO do Portal do Cliente. Esse nome aparece na lista JWT no portal. Se o botão de login estiver ativado, esse nome também é exibido aos leitores na página de login, então deve ser significativo para o público que está fazendo login.
Autenticação
Campo | Obrigatório | Descrição |
|---|---|---|
ID do cliente | Sim | Gerado automaticamente pelo Document360. Este é o identificador único para essa configuração JWT. Copie usando o ícone de copiar e adicione ao seu aplicativo cliente. |
Login URL | Sim | A URL na sua aplicação para onde os leitores são enviados para autenticar (por exemplo, |
Nome de domínio | Sim | Derivado automaticamente a partir da URL de login. Este é o domínio associado a essa configuração do JWT. Quando um leitor entra nesse domínio na página de login, ele é direcionado para a URL de login dessa configuração. O domínio deve ser único em todas as configurações JWT do projeto. |
Logout URL | Não | A URL para a qual os leitores são redirecionados após a desconexão (por exemplo, |
Regras de validação de nomes de domínio:
Subdomínios são tratados como entradas distintas.
portal.example.comeexample.comsão domínios separados e podem ser atribuídos a diferentes configurações.Domínios curinga como
*.example.comnão são suportados. Cada domínio deve ter um valor exato.Um domínio já atribuído a outra configuração JWT no mesmo projeto não pode ser reutilizado. Um erro de validação em linha é mostrado no save.
Chaves JWT
IMPORTANTE
Fichas secretas são exibidas apenas uma vez no momento da criação. Copie e armazene com segurança antes de fechar o modal. Se forem perdidos, eles devem ser regenerados, o que invalida imediatamente os tokens anteriores.
O Document360 gera automaticamente dois tokens secretos quando o modal é aberto. Esses tokens são visíveis apenas em texto simples durante esta sessão. Uma vez que o modal é fechado, eles são mascarados e não podem ser recuperados.
Token | Propósito |
|---|---|
Token secreto primário | Assina e verifica as solicitações de autenticação do JWT entre sua aplicação e o Document360. Esse token deve ser mantido em sigilo. Se for comprometido, regenere imediatamente e atualize seu aplicativo para evitar acessos não autorizados. |
Token secreto secundário | Serve como chave de assinatura reserva para apoiar a rotação de credenciais sem interrupção do serviço. Durante uma rotação, o token secundário permite que a autenticação continue enquanto o token primário está sendo atualizado. |
Use o ícone Copiar ao lado de cada token para copiar seu valor.
Configurações avançadas
Expanda as configurações avançadas para configurar as seguintes opções.
Ativar a autenticação JWT
Padrão: LIGADO
Quando ativada, essa configuração está ativa e os leitores podem usá-la para fazer login. Desabilitá-lo desativa a configuração sem deletá-la, o que é útil para suspender temporariamente uma configuração sem perder suas configurações.
Mostrar botão de login
Padrão: DESLIGADO
Quando ativado, um botão de login com marca para essa configuração aparece na página de login da base de conhecimento. Isso oferece aos leitores uma opção de login direto sem a necessidade de inserir um nome de domínio.
NOTA
No máximo, 3 botões de login do JWT podem ser exibidos simultaneamente na página de login. Quando esse limite é atingido, o botão de alternância é automaticamente desativado para configurações adicionais. Leitores designados para configurações sem um botão visível ainda podem se autenticar digitando seu nome de domínio no campo Nome de Domínio na página de login, o que os direciona para a configuração correta.
Quando o botão Mostrar login está ativado, os seguintes campos adicionais estão disponíveis:
Texto do botão de login — o rótulo exibido no botão Isso deve identificar claramente a fonte de autenticação para os leitores.
Logo do botão de login — uma imagem carregada para marcar o botão. Formatos aceitos: JPG, PNG, SVG Tamanho máximo do arquivo: 512 KB.
Passo 3 — Configure sua aplicação
Copie os seguintes valores da configuração do JWT e adicione-os aos campos correspondentes do seu aplicativo cliente:
ID do cliente
URL de retorno de chamada
URL de geração de código
Token secreto primário
Token secreto secundário
Salve a configuração
Clique em Criar. O botão permanece inativo até que todos os campos necessários contenham valores válidos. Em caso de sucesso, o modal fecha e a nova configuração aparece na lista JWT.
NOTA
Leitores não precisam de uma conta separada no Document360. A autenticação é feita inteiramente pelo seu aplicativo. Uma conta na sua aplicação é suficiente para que um leitor acesse a base de conhecimento
Lista de verificação para desenvolvedores
Registre a URL de login, a URL de retorno de chamada e a URL de geração de código nas configurações do seu JWT.
Armazene o Segredo do Cliente de forma segura. Ele é exibido apenas uma vez no momento da criação.
Implemente lógica backend para chamar a URL de geração de código usando HTTP Basic Auth.
Assine o JWT no seu backend usando seu segredo de cliente. Nunca expõe a lógica de assinatura do lado do cliente.
Aplique o HTTPS em todos os endpoints envolvidos no fluxo de autenticação.
Teste o comportamento da sessão, expiração do token e renovação automática da sessão antes de entrar no mercado.
Monitore os logs backend para erros 401, que normalmente indicam códigos de autorização expirados ou incompatibilidades de tokens.
Implementando a lógica de redirecionamento SSO do JWT
Após concluir a configuração do JWT no Document360, sua aplicação precisa de uma rota backend para lidar com a etapa final do fluxo de login.
Esta rota:
Valida que o usuário já está autenticado na sua aplicação
Envia uma requisição segura para a URL de geração de código do Document360
Recupera um código de autorização de uso único
Redireciona o usuário para o site da base de conhecimento com esse código
/// <summary>
/// Example endpoint to authenticate a user and retrieve a token from the identity server,
/// and redirect the user to the Knowledge Base (KB) using the token code.
/// </summary>
/// <param name="clientId">Client ID issued for your application</param>
/// <param name="clientSecret">Client secret associated with the client ID</param>
/// <returns>Redirects to the KB with the issued code</returns>
[HttpGet]
[Route("authenticate")]
public async Task<IActionResult> AuthenticateAsync(string clientId, string clientSecret)
{
if (!HttpContext.User.Identity.IsAuthenticated)
{
// user is not authenticated, redirect to an error or login page
return Unauthorized(new { message = "User not authenticated" });
}
// Ensure you have the correct client ID and secret from your Document360 JWT configuration
var authToken = Encoding.ASCII.GetBytes($"{clientId}:{clientSecret}");
// Create an HttpClient instance
using var httpClient = new HttpClient();
// Set the Authorization header with Basic authentication
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authToken));
// Prepare the payload with user information
var payload = new
{
username = User.Identity.Name,
firstName = "FirstName", // Replace or customize as needed
lastName = "LastName",
emailId = "user@example.com", // Replace with actual user email
readerGroupIds = new List<string> { "group1", "group2" }, // Replace with actual reader group IDs if needed (Optional)
tokenValidity = 3600 // Token validity in seconds (Optional, default is 5 minutes)
};
var payloadContent = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
// Identity server token endpoint - replace with your actual URL
string identityServerUrl = "codeGeneration endpoint, you can find that in JWT config portal";
// KB login URL to redirect after successful token issuance
string kbLoginUrl = "https://{your subdomain}.document360.io";
var response = await httpClient.PostAsync(identityServerUrl, payloadContent);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var tokenJson = JObject.Parse(content);
// Extract the code from the response
var tokenCode = (string)tokenJson.SelectToken("code");
// Construct the KB login URL with code query parameter
string finalRedirectUrl = $"{kbLoginUrl}?code={tokenCode}";
return Redirect(finalRedirectUrl);
}
else
{
// Handle error response from the identity server
var error = await response.Content.ReadAsStringAsync();
return StatusCode((int)response.StatusCode, new { error = "Token request failed", details = error });
}
}const express = require('express');
const https = require('https');
const axios = require('axios');
const app = express();
// Middleware to parse JSON
app.use(express.json());
// Replace with your actual client ID and secret from Document360
const clientId = 'b20bf794-050c-4194-bc30-bd834c51adad';
const clientSecret = '07U7nXLbOY7-klsmWrOOT3_qHa631XMOuqSd_gl69I8';
const codeGenerationUrl = 'https://identity.document360.net/jwt/generateCode';
// Your D360 KB URL (Replace your-subdomain)
const kbLoginUrl = 'https://jwt-readergroup1-sep.document360.net/jwt/authorize';
// ROUTE: /authenticate
app.get('/authenticate', async (req, res) => {
try {
// Example — add your real auth logic
const isAuthenticated = true;
if (!isAuthenticated) {
return res.status(401).json({ message: 'User not authenticated' });
}
// Basic Authorization header
const authHeader = Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
// Payload to send to D360
const payload = {
username: 'john.doe',
firstName: 'John',
lastName: 'Doe',
emailId: 'john.doe@example.com',
readerGroupIds: ['group1', 'group2'],
tokenValidity: 3600
};
// POST to D360 identity server to get the code
const response = await axios.post(
codeGenerateUrl,
payload,
{
headers: {
'Authorization': `Basic ${authHeader}`,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
httpsAgent: new https.Agent({ maxVersion: 'TLSv1.2' })
}
);
const tokenCode = response.data?.code;
if (!tokenCode) {
return res.status(500).json({ message: 'No code received from Document360' });
}
console.log("Redirecting to:", `${kbLoginUrl}?code=${tokenCode}`);
// Redirect user to KB with ?code=<token>
return res.redirect(`${kbLoginUrl}?code=${tokenCode}`);
} catch (error) {
console.error("JWT SSO error:", error.message);
return res.status(500).json({
message: "JWT SSO failed",
details: error.response?.data || error.message
});
}
});import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.nio.charset.StandardCharsets;
import java.util.*;
@RestController
public class JwtSsoController {
private final String clientId = "your-client-id";
private final String clientSecret = "your-client-secret";
private final String codeGenerationUrl = "https://identity.document360.io/api/jwt/generate-code";
private final String kbLoginUrl = "https://your-subdomain.document360.io/jwt/authorize";
@GetMapping("/authenticate")
public ResponseEntity<?> authenticate() {
// Example: Check if user is authenticated in your system
boolean isAuthenticated = true; // Replace with actual logic
if (!isAuthenticated) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("User not authenticated");
}
// Create Basic Auth header
String auth = clientId + ":" + clientSecret;
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Basic " + encodedAuth);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
// Construct payload
Map<String, Object> payload = new HashMap<>();
payload.put("username", "john.doe");
payload.put("firstName", "John");
payload.put("lastName", "Doe");
payload.put("emailId", "john.doe@example.com");
payload.put("readerGroupIds", Arrays.asList("group1", "group2"));
payload.put("tokenValidity", 3600); // Optional
HttpEntity<Map<String, Object>> request = new HttpEntity<>(payload, headers);
RestTemplate restTemplate = new RestTemplate();
try {
ResponseEntity<Map> response = restTemplate.postForEntity(codeGenerationUrl, request, Map.class);
if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {
String tokenCode = (String) response.getBody().get("code");
if (tokenCode == null || tokenCode.isEmpty()) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("No code returned from Document360");
}
// Redirect to the KB site with code
String redirectUrl = UriComponentsBuilder.fromHttpUrl(kbLoginUrl)
.queryParam("code", tokenCode)
.toUriString();
HttpHeaders redirectHeaders = new HttpHeaders();
redirectHeaders.setLocation(java.net.URI.create(redirectUrl));
return new ResponseEntity<>(redirectHeaders, HttpStatus.FOUND); // 302 redirect
} else {
return ResponseEntity.status(HttpStatus.BAD_GATEWAY)
.body("Failed to get code from Document360: " + response.getStatusCode());
}
} catch (Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("JWT SSO error: " + ex.getMessage());
}
}
}Testando sua configuração do JWT
Depois de implementar a lógica SSO do JWT no backend, pode testar a integração usando qualquer um cURL ou o Postman. Esses testes simulam como seu backend se comunica com o servidor de identidade do Document360 para recuperar um código de autorização único.
Testando a configuração do JWT usando cURL
Para testar a configuração do JWT, você pode usar o comando cURL com as seguintes especificações. A versão HTTP deve ser especificada (HTTP2 sobre TLS e versão do SSL para TLS 1.2). Sem isso, o cURL falharia.
curl -X POST https://identity.document360.io/api/jwt/generate-code \
-H "Authorization: Basic BASE64_ENCODED_CLIENTID:CLIENTSECRET" \
-H "Content-Type: application/json" \
--http2-prior-knowledge \
--tls-max 1.2 \
-d '{
"username": "john.doe",
"firstName": "John",
"lastName": "Doe",
"emailId": "john.doe@example.com",
"readerGroupIds": ["group1", "group2"],
"tokenValidity": 15
}'
NOTA
Substitua a string de autorização codificada e os campos de payload pelos seus credenciais reais de cliente e informações de usuário do seu sistema.
Diferente de outras opções IdP disponíveis (Okta, Azure AD, etc.), o usuário não precisa de uma conta leitora separada no Document360. Uma conta no aplicativo cliente é suficiente.
Após ativar o login do JWT, o leitor pode usar o aplicativo cliente para fazer login como uma conta de leitor no site da base de conhecimento Document360.
Testando a configuração do JWT usando Postman
Você pode testar sua configuração SSO do JWT usando o Postman enviando manualmente uma requisição para a URL de geração de código. Isso permite verificar se suas credenciais e carga útil do cliente foram aceitas e que um código de autorização único foi gerado com sucesso.
Para testar usando o Postman, siga estes passos:
Abra o Postman e crie um novo pedido.
Defina o método de requisição para POST e, no campo URL, insira a URL de geração de código na tela de configuração do JWT:
https://identity.document360.io/api/jwt/generate-codeVá para a aba Autorização .
Defina o Tipo para
Basic Auth.No campo Nome de Usuário , insira seu ID de Cliente.
No campo Senha , insira seu Segredo do Cliente.
Navegue até a aba Corpo .
Selecione a opção raw e defina o formato para JSON.
Insira a carga útil JSON necessária. Exemplo:
{ "username": "john.doe", "firstName": "John", "lastName": "Doe", "emailId": "john.doe@example.com", "readerGroupIds": ["group1", "group2"], "tokenValidity": 15 }Clique em Enviar para enviar para enviar o pedido.
Se a configuração estiver correta, você deve receber uma 200 OK resposta com um codeúnico . Você pode então usar esse código para redirecionar o leitor para o site da base de conhecimento e completar o fluxo de login do SSO.
Roteamento de leitores baseado em domínio
Quando um leitor insere um domínio no campo Nome de Domínio na página de login, o Document360 o compara com todas as configurações ativas do JWT e direciona o leitor para a URL de login da configuração correspondente.
O Document360 aplica uma regra de correspondência mais específica. Por exemplo, se ambos example.com support.example.com estiverem configurados, um leitor que entra support.example.com é roteado para a support.example.com configuração em vez do domínio pai. Isso permite que subdomínios sejam gerenciados por configurações dedicadas sem conflito.
Regras adicionais de roteamento:
A correspondência de domínio é indistinta a maiúsculas minúsculas, e cada nome de domínio deve ser único.
Se a configuração combinada estiver inativa, o leitor é direcionado para as opções padrão de login.
Se nenhuma correspondência for encontrada, o leitor é direcionado para as opções padrão de login.
O campo Nome de Domínio se aplica exclusivamente ao roteamento JWT. Os provedores SSO não podem ser acessados por meio deste campo.
Coexistência entre JWT e SSO
Configurações JWT e SSO (SAML ou OpenID) podem estar ativas simultaneamente no mesmo projeto. Cada tipo é gerenciado de forma independente — modificar uma configuração JWT não tem efeito nas configurações SSO, e vice-versa. Isso permite que as organizações apoiem leitores de diferentes sistemas de identidade por meio de um único portal de base de conhecimento, sem conflitos entre métodos de autenticação.
Por exemplo, clientes empresariais podem se autenticar via um sistema baseado em JWT vinculado à sua aplicação, enquanto membros internos da equipe fazem login por meio de um IdP centralizado, como o Okta, usando SAML. Ambos os métodos podem estar ativos ao mesmo tempo sem interferência.
Limites de botões de login
Tipo de autenticação | Máximo de botões de login exibidos | Acesso além do limite |
|---|---|---|
JWT | 3 | As três primeiras configurações do JWT são exibidas como botões de login baseadas na ordem de posição do CTA. Se você configurar mais de 3 provedores JWT, os leitores podem autenticar usando o campo Nome de domínio, que os encaminha para a configuração apropriada. Você pode configurar até 5 provedores JWT no total. |
SSO | 5 | Apenas os primeiros 5 provedores SSO (por ordem de posição da CTA) são exibidos. Provedores SSO além desse limite não são acessíveis aos leitores por nenhum meio. |
Por exemplo, se 5 configurações de JWT estiverem ativas, 3 aparecem como botões de login e os outros 2 são acessíveis apenas por meio de entrada de domínio. Se 6 configurações SSO estiverem ativas, apenas 5 estão acessíveis — a 6ª não pode ser alcançada pelos leitores.
O limite JWT (3) e o limite SSO (5) são aplicados independentemente. Alcançar um limite não afeta o outro.
Quando o limite de 3 botões para JWT é atingido, todos os Administradores do Projeto recebem uma notificação do sistema: "Você atingiu o limite de 3 botões de login no JWT. Configurações adicionais de JWT não aparecerão como botões na página de login. Os leitores ainda podem fazer login digitando seu nome de domínio."
Estados da página de login do leitor
A página de login apresentada aos leitores é determinada por dois fatores: o estado do interruptor padrão Desativar a página de login padrão e quais configurações JWT e SSO estão ativas.
Estado | Alternar | JWT ativo | SSO ativo | Experiência do leitor |
|---|---|---|---|---|
1 | DESLIGADO | Não | Sim | Formulário padrão de e-mail/senha com botões de login SSO |
2 | DESLIGADO | Sim | Sim | Formulário padrão de e-mail/senha com botões de login SSO e JWT |
3 | DESLIGADO | Sim | Não | Formulário padrão de e-mail/senha com botões de login do JWT |
4 | LIGADO | Não | Sim | Apenas botões de login SSO — sem formulário de e-mail/senha |
5 | LIGADO | Sim | Não | Campo de entrada de nome de domínio com botões de login do JWT — sem formulário de e-mail/senha |
6 | LIGADO | Sim | Sim | Campo de entrada de nome de domínio com botões de login do JWT e SSO — sem formulário de e-mail/senha |
Regras aplicáveis:
Apenas configurações ativas são exibidas. Configurações inativas nunca são mostradas aos leitores, independentemente do estado do alternador.
O campo de entrada do nome de domínio é exibido sempre que o interruptor está LIGADO e pelo menos uma configuração do JWT está ativa. Isso garante que configurações JWT sem um botão de login visível permaneçam acessíveis por meio da entrada de domínio.
Se todas as configurações JWT e SSO estiverem inativas enquanto a opção de alternância estiver ATIVADA, os leitores recebem uma mensagem indicando que não há opções de login disponíveis no momento.
Mudanças para alternar o estado ou o status de configuração entram em vigor imediatamente para novas sessões de leitor. Sessões autenticadas existentes não são afetadas.
Registro e notificações de auditoria
Todas as ações de configuração do JWT são capturadas automaticamente no log de auditoria. Isso fornece um registro completo e à prova de adulteração das mudanças para fins de conformidade e revisão de segurança.
Ações registradas:
Criar, Atualizar, Excluir
Ativar, Desativar
Regenerar Token Primário, Regenerar Token Secundário
Ativar/Desabilitar o Login Direto do JWT
Ativar/Desabilitar a opção de alternar a página de login padrão
Cada entrada de log registra o tipo de ação, carimbo de data (UTC), a identidade do administrador que realizou a ação e o nome da configuração no momento da ação. Para as ações de atualização, o log captura os campos específicos que mudaram junto com os valores anteriores e novos. Os valores dos tokens nunca são registrados — apenas o fato da rotação é registrado para proteger a segurança das credenciais.
Os registros são mantidos por um mínimo de 90 dias. O acesso aos registros de auditoria do JWT é restrito a usuários com permissões de Segurança e Auditoria.
Para habilitar o rastreamento de atividade do JWT no Team Auditing, navegue até Configurações > Segurança e Auditoria > Configuração de auditoria > Auditoria da Equipe e ative os interruptores relevantes do evento JWT. Uma vez ativada, a atividade do JWT é registrada na aba de auditoria da equipe . Use o menu suspenso Evento e pesquise por "JWT" para filtrar registros por tipo de evento.
Destinatários das notificações por e-mail:
Tipo de evento | Recipientes |
|---|---|
Todos os eventos de configuração do JWT | Administradores do Projeto |
Regeneração secreta de tokens | Administradores e Proprietários do Projeto |
Redirecionar para outras páginas em vez da página inicial
Por padrão, após o login, os usuários são redirecionados para a página inicial da sua base de conhecimento.
Se sua página inicial não for publicada, os usuários serão redirecionados para a página /docs .
Para redirecionar os usuários para uma página diferente na sua base de conhecimento (diferente das páginas Home ou /docs ), configure o redirecionamento durante a configuração do JWT usando o código a seguir.
Padrão URL
https://<Knowledge base URL>/jwt/authorize?code=<code>&redirectUrl=<redirect path>Parâmetros
<URL da base de conhecimento>: A URL principal do seu site da base de conhecimento.
<Code>: O código gerado pelo endpoint de geração de código do Document360.
<caminho de redirecionamento>: A nova URL onde você quer que os usuários aterrissem após o login.
Exemplo
https://example.document360.io/jwt/authorize?code=FOTaS_SW6dLGytQXvrG_rRFGhyPvrDDrgxJAZzYvJcY&redirectUrl=/docs/5-basic-things-to-get-started
NOTA
O Document360 enviará a URL de Redirecionamento para
redirectPatho endpoint de login. Quando o endpoint de login redireciona de volta para a base de conhecimento com o código de autenticação, ele deve retornar a URL de Redirecionamento como parâmetroredirectUrl.No KB Site 2.0, o redirecionamento é feito usando cookies em vez do
redirectUrlparâmetro. Se sua implementação no JWT for baseada no redirecionamento de string de consulta (usando oredirectUrlparâmetro), por favor, note que a abordagem baseada em cookies não suporta esse parâmetro. Talvez você precise atualizar sua implementação ou entrar em contato com o suporte para esclarecimentos adicionais.
Solução de problemas
Se você encontrar problemas durante a configuração do SSO do JWT, consulte os seguintes erros comuns e suas soluções:
Erro 401 não autorizado ao testar JWT em Postman
Erro: 401 Erro não autorizado
Se você encontrar um erro 401 Não Autorizado ao testar JWT (JSON Web Token) usando o Postman, isso normalmente ocorre porque as configurações de autorização não estão configuradas corretamente.
Passos para resolver:
Para resolver esse erro,
No Postman, abra a solicitação que você está testando.
Navegue até a aba Autorização .
Defina o tipo de autorização para Autenticação Básica.
No campo Nome de Usuário , insira o ID do Cliente.
No campo Senha , insira o Segredo do Cliente.
Vá na aba Corpo .
Selecione a opção raw no menu suspenso e certifique-se de que o formato esteja definido para JSON.
Adicione o payload JSON necessário para a requisição da API.
Clique em Enviar para executar o pedido.
Verifique a resposta para ver os resultados esperados. Se a solicitação for bem-sucedida, você deve receber um código ou token de autenticação na resposta.
FAQ
Se um usuário JWT configurado sair do aplicativo cliente, isso significa que ele também estará desconectado do Document360?
Não, a sessão no Document360 é independente após o Single Sign-On inicial. Os usuários podem continuar usando o Document360 até que a validade do token expire, mesmo após sair do aplicativo cliente.
Exemplo: Se a validade do token for definida para 1 dia, a sessão do Document360 permanecerá ativa até o token expirar. Quando isso acontecer, o usuário será deslogado.
Posso fornecer um valor que exceda a faixa de validade permitida pelo token?
Não, se um valor fora do intervalo for fornecido, o sistema automaticamente atribuirá o valor permitido mais próximo:
5 minutos para valores abaixo do mínimo.
1440 minutos para valores acima do máximo.
Qual é a diferença entre JWT e SSO?
Você pode ver uma comparação entre JWT (JSON Web Token) e SSO (Single Sign-On) na tabela abaixo:
Categoria | JWT (JSON Web Token) | SSO (Login Único) |
Autenticação | Tokens gerados por sessão/solicitação do usuário. | Autenticação centralizada entre aplicativos. |
Expiração do Token | Tokens normalmente expiram após um período determinado. | Sem token, sessão é tratada pelo provedor de identidade. |
Segurança | Requer armazenamento seguro de tokens. | Armazenamento de credenciais mais seguro e centralizado. |
Uso | Usado para autenticação sem estado, de uso único. | Usado para múltiplas aplicações com um único login. |
Integração | Mais fácil de implementar em aplicativos personalizados. | Requer integração com um provedor de identidade. |
JWT e SSO (SAML ou OpenID) podem estar ativos simultaneamente?
Sim. Configurações JWT e SSO podem coexistir no mesmo projeto sem conflito. Cada tipo é gerenciado de forma independente, as mudanças em um não afetam o outro.
O que deve ser feito se fichas secretas forem perdidas?
Tokens secretos são exibidos apenas uma vez no momento da criação da configuração. Se for perdido, navegue até o modal Editar configuração e clique em Regenerar para o token relevante. A regeneração invalida imediatamente o token existente. A aplicação deve ser atualizada com o novo token sem demora para evitar falhas de autenticação.
Nossa configuração do JWT ou o acesso dos usuários vão mudar após migrar para o site da KB 2.0?
Não. Quando você migrar para o site KB 2.0, não haverá alterações na sua configuração atual do JWT, acesso ao leitor ou usuários internos. Uma equipe dedicada de migração irá te apoiar durante todo o processo, garantindo que suas personalizações e configurações existentes permaneçam intactas após a avaliação.