Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Spring Security + JWT, o certo seria colocar id no token ?

boa tarde tropa, em Spring Security + JWT o certo seria colocar o id no token ? e se for o certo a se fazer, como que faz isso ? porque usamos UserDetails, e não temos metodo de getId ou alguma outra forma de conseguir o id pelo UserDetails, alguem pode me ajudar tirar essa duvida ? porque vamos supor que o usuario tem uma carrinho, como iria ter a segurança que o usuario iria ver somente o carrinho dele ?

1 resposta
solução!

Bom dia, Cauã, tudo certo

Quando trabalhamos com JWT, é comum incluir informações no token que possam ser úteis para identificar o usuário ou para aplicar regras de autorização. Incluir o ID do usuário no token é uma prática comum, pois permite que você identifique o usuário de forma única e associe dados específicos, como o carrinho de compras, a esse usuário.

Para incluir o ID do usuário no token, você pode adicionar esse dado como uma "claim" no JWT. Aqui está um exemplo de como você poderia fazer isso:

  1. Criar o Token com o ID do Usuário:

    Quando você gera o token, adicione o ID do usuário como uma claim. Por exemplo:

    String token = Jwts.builder()
        .setSubject(userDetails.getUsername())
        .claim("userId", userId) // Aqui você adiciona o ID do usuário
        .signWith(SignatureAlgorithm.HS512, secretKey)
        .compact();
    
  2. Recuperar o ID do Usuário do Token:

    Quando você precisar recuperar o ID do usuário do token, você pode fazer isso ao analisar o token:

    Claims claims = Jwts.parser()
        .setSigningKey(secretKey)
        .parseClaimsJws(token)
        .getBody();
    
    String userId = claims.get("userId", String.class); // Aqui você recupera o ID do usuário
    

Quanto à questão do UserDetails, você pode estender a classe UserDetails ou criar uma implementação personalizada que inclua o método getId() para acessar o ID do usuário.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.