Skip to content

Autenticação via SDK JavaScript

A autenticação via SDK JavaScript é adequada para SPAs porque permite acessar as informações de autenticação diretamente no cliente através do SDK LayersPortal.js. No entanto, a validação da sessão deve sempre ser feita no servidor usando o token de aplicação, nunca no cliente.

Importante notar que essa abordagem está disponível apenas para portais embutidos na Layers, já que o SDK LayersPortal.js funciona apenas quando o portal está sendo executado dentro do contexto da Layers (iframe, app mobile, etc.).

Para portais externos ou aplicações SSR, utilize a autenticação via URL com query parameters.

Como funciona

O SDK LayersPortal.js fornece acesso às informações de sessão através de propriedades do objeto global LayersPortal. Quando o portal está embutido na Layers e a biblioteca está conectada, essas propriedades contêm os dados necessários para validar a sessão do usuário.

As propriedades disponíveis são (consulte a referência completa dos parâmetros de autenticação e a referência do LayersPortal.js):

  • LayersPortal.session: identificador da sessão do usuário
  • LayersPortal.communityId: identificador da comunidade através da qual o usuário está acessando
  • LayersPortal.userId: identificador único do usuário na Layers

Configuração inicial

Antes de acessar as informações de autenticação, é necessário importar e configurar o SDK LayersPortal.js na página do portal. Consulte o guia Configurando a lib LayersPortal.js para instruções detalhadas sobre como configurar o SDK.

Implementação

Aguardando a conexão

Antes de acessar as propriedades de autenticação, aguarde o evento connected ou use a promise connectedPromise para garantir que o SDK está conectado à Layers.

javascript
LayersPortal.on('connected', function(data) {
  // SDK conectado, pode acessar informações de autenticação
  const { session, communityId, userId } = LayersPortal;
  
  // Proceder com a validação da sessão
});

Validando a sessão

A validação da sessão deve ser feita no servidor, nunca no cliente. O token de aplicação fornecido pela Layers é uma credencial sensível que não pode ser exposta no frontend. Tokens que vazam no frontend podem ser automaticamente inativados pela Layers por questões de segurança.

O fluxo correto é: o cliente extrai as informações de sessão do SDK LayersPortal.js e envia para seu backend, que então valida a sessão usando o token de aplicação armazenado de forma segura no servidor através do endpoint de validação de sessão.

Segurança

Nunca exponha o token de aplicação no frontend.
A validação da sessão deve sempre acontecer no servidor. Tokens expostos no código JavaScript podem ser facilmente extraídos por qualquer pessoa que acesse o código-fonte da página e podem resultar na inativação automática do token pela Layers.

Implementação no cliente (frontend):

javascript
async function validateSession(session, communityId, userId) {
  // Fazer requisição para seu backend
  const response = await fetch('https://seu-app.com/api/validate-layers-session', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      session,
      community: communityId,
      userId,
    }),
  });
  
  if (!response.ok) {
    throw new Error('Sessão inválida');
  }
}

Implementação no servidor (backend):

javascript
app.post('/api/validate-layers-session', async (req, res) => {
  const { session, community, userId } = req.body;
  
  try {
    const response = await fetch(
      `https://api.layers.digital/v1/sso/session/validate?session=${session}&community=${community}&userId=${userId}`,
      {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${process.env.LAYERS_APP_TOKEN}`,
        },
      }
    );
    
    if (response.status === 200) {
      res.json({ valid: true });
    } else {
      res.status(401).json({ valid: false });
    }
  } catch (error) {
    console.error('Erro ao validar sessão:', error);
    res.status(500).json({ error: error.message });
  }
});