Documentation Index

Fetch the complete documentation index at: https://docs.document360.com/llms.txt

Use this file to discover all available pages before exploring further.

Isenção de responsabilidade: Este artigo foi gerado usando tradução automática.

Configuração do JWT SSO

Prev Next

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.

Flowchart illustrating user login process for accessing knowledge base content securely.


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.

Flowchart illustrating user authentication process with Document360 Identity Server and Customer App.

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

  1. 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.

  2. 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.

  3. Seu backend solicita um código de autenticação único

    • Após o login do usuário, seu backend envia uma POST requisiçã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 readerGroupIds

      • tokenValidity em 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.

  1. 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).

  2. 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.

  1. 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.

  2. 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 tokenValidity campo 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.

Novidade no JWT no Document360

Se não houver nenhuma configuração de JWT no seu projeto, complete os seguintes passos em ordem:

  1. Configure login no JWT — configure configurações compartilhadas em nível de projeto.

  2. Crie uma configuração de JWT — adicione sua primeira configuração de JWT.

  3. 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, https://app.example.com/login).

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, https://app.example.com/logout). Se não especificado, os leitores são direcionados para a página padrão de logout do JWT no Document360.

Regras de validação de nomes de domínio:

  • Subdomínios são tratados como entradas distintas. portal.example.com e example.com são domínios separados e podem ser atribuídos a diferentes configurações.

  • Domínios curinga como *.example.com nã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:

  1. 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-code
  2. Vá para a aba Autorização .

  3. Defina o Tipo para Basic Auth.

  4. No campo Nome de Usuário , insira seu ID de Cliente.

  5. No campo Senha , insira seu Segredo do Cliente.

  6. Navegue até a aba Corpo .

  7. Selecione a opção raw e defina o formato para JSON.

  8. 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
    }
  9. 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 redirectPath o 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âmetro redirectUrl .

  • No KB Site 2.0, o redirecionamento é feito usando cookies em vez do redirectUrl parâmetro. Se sua implementação no JWT for baseada no redirecionamento de string de consulta (usando o redirectUrl parâ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,

  1. No Postman, abra a solicitação que você está testando.

  2. Navegue até a aba Autorização .

  3. Defina o tipo de autorização para Autenticação Básica.

  4. No campo Nome de Usuário , insira o ID do Cliente.

  5. No campo Senha , insira o Segredo do Cliente.

  6. Vá na aba Corpo .

  7. Selecione a opção raw no menu suspenso e certifique-se de que o formato esteja definido para JSON.

  8. Adicione o payload JSON necessário para a requisição da API.

  9. 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.