Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida sobre Spring Security (Teorica)

A minha duvida é seguinte. Quando o usuario pode ser o medico ou paciente logar eu posso colocar um tempo determinado para fazer o que esse usuário precisa logar. novamente para destravar o recurso ? Ou seja token expirar durante por exemplo 30 minuto.

4 respostas
solução!

Sim, é uma prática comum e recomendada utilizar tempos de expiração para os tokens em sistemas que envolvem autenticação e autorização, como em APIs REST protegidas pelo Spring Security. A ideia é limitar o tempo de vida de um token para mitigar potenciais riscos de segurança.

No contexto do Spring Security, o controle de expiração geralmente é gerenciado através do tempo de expiração do token de acesso (access token). O tempo de expiração é definido no momento em que o token é emitido e, uma vez que esse tempo expira, o token torna-se inválido e o usuário precisará obter um novo token para continuar a interagir com a API.

Você pode configurar o tempo de expiração em sua aplicação Spring Boot através de propriedades no arquivo application.properties (ou application.yml). Aqui está um exemplo básico:

# Configuração do tempo de expiração do token em segundos
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=<URL_DO_SEU_JWKS_ENDPOINT>
spring.security.oauth2.resourceserver.jwt.issuer-uri=<URL_DO_SEU_ISSUER>
spring.security.oauth2.resourceserver.jwt.clock-skew=<VALOR_EM_SEGUNDOS_PARA_CORRECAO_DE_SINCRONIZACAO>
spring.security.oauth2.resourceserver.jwt.jws-algorithm=<ALGORITMO_JWS>

Por padrão, o Spring Security usa o tempo de expiração configurado no próprio token JWT. Ao validar um token, ele verifica se o tempo de expiração (exp) no token JWT ainda não foi atingido. Se tiver, o token é considerado inválido.

Portanto, para definir um tempo de expiração de 30 minutos, você pode configurar a propriedade spring.security.oauth2.resourceserver.jwt.clock-skew com o valor de 1800 segundos (30 minutos).

É importante também considerar a implementação específica do seu sistema e a sensibilidade das operações realizadas. Dependendo do contexto, você pode ajustar o tempo de expiração para ser mais curto ou mais longo, conforme necessário para garantir a segurança adequada.

Caso tenha conseguido esclarecer suas dúvidas, fico feliz em ter ajudado. Estou à disposição para qualquer outra questão que possa surgir. Um abraço! Se este post foi útil, por favor, marque como solucionado ✓. Desejo a você excelentes estudos!

Achei a observação muito útil, gostaria de saber mais a respeito, como essa implementação é usada, um exemplo de código no qual isso poderia ser aplicado. Seria bem interessante!

Oi!

Complementando as respostas anteriores.

Sim, no curso mesmo foi criado o método dataExpiracao() na classe TokenService:

private Instant dataExpiracao() {
    return LocalDateTime.now().plusHours(2).toInstant(ZoneOffset.of("-03:00"));
}

O código está colocando uma expiração após 2 horas, mas você pode reduzir para 30 minutos:

private Instant dataExpiracao() {
    return LocalDateTime.now().plusMinutes(30).toInstant(ZoneOffset.of("-03:00"));
}

No curso foi utilizado apenas uma lib simples que gera tokens e faz a validação, mas caso você precise de algo mais elaborado, o ideal é utilizar o protocolo OAuth 2, cujo Spring implementa no módulo spring-boot-oauth-2

Bons estudos!