programing

JWT를 데이터베이스에 저장하는 것이 말이 됩니까?

oldcodes 2023. 8. 27. 09:54
반응형

JWT를 데이터베이스에 저장하는 것이 말이 됩니까?

Spring Boot, Spring Security, OAUTH2, JWT를 auth 토큰으로 하는 기본 인증 시스템을 구현하였습니다.작동은 괜찮지만 JWT를 데이터베이스에 저장하고 인증 요청을 할 때마다 토큰이 있는지 확인하는 것이 말이 되는지 생각했습니다.저는 다음과 같은 시나리오를 구체적으로 생각하고 있었습니다. 사용자가 모바일 장치에서 인증을 받았으며 사용자가 해당 장치를 분실했기 때문에 해당 장치의 권한을 취소하려고 합니다.그런 다음 사용자 ID에 발급된 토큰을 지우고 사용자 ID에 할당된 모든 토큰을 인증 취소하는 작업을 실행할 수 있습니다.다른 방법은?제가 잘못 생각하고 있는 건가요, 아니면 너무 복잡한 건가요?

모바일 APP에서 호출될 REST API를 확보하기 위한 것입니다.

JWT를 DB에 저장할 수 있지만 JWT의 이점 중 일부를 잃게 됩니다.JWT는 토큰이 합법적인지 확인하기 위해 암호화를 사용할 수 있기 때문에 매번 DB에서 토큰을 확인할 필요가 없다는 장점을 제공합니다.만약 당신이 db에서 토큰을 찾아야 한다면, 당신은 정보를 전달하지 않는 불투명한 토큰을 사용하고 서버와 데이터베이스가 당신에게 정보를 제공하도록 하는 것이 좋을 것입니다.반면에, 만약 당신이 db에 토큰을 저장할 것이라면, 나는 JWT가 당신의 토큰 유형에 대해 나쁜 선택이라고 생각하지 않습니다.당신의 말처럼, 당신이 당신의 토큰을 DB에 저장하면 해지할 수 있는 이점이 있습니다.이 모든 것은 달성하고자 하는 것(더 빠른 권한 부여 등)과 요청 시 해지할 수 있는 능력에 따라 달라집니다.

원하는 경우에도 토큰을 DB에 저장하지 않고 OAuth2와 함께 JWT를 사용할 수 있습니다.JWT에는 사용자가 설정할 수 있는 구성 가능한 만료 시간이 있으며, 이후에는 유효하지 않습니다.액세스 토큰(JWT 여부와 상관없이)은 보안을 위해 일반적으로 단명되어야 합니다.누군가의 전화기를 도난당하고 토큰에 액세스하는 것이 문제라면 해당 토큰이 빨리 만료되도록 하는 것이 해결책이라고 생각합니다(30분?).만약 당신이 oauth2를 사용하고 있다면, 누군가가 앱을 계속 사용하는 것을 막는 수단은 실제 소유자가 권한 부여 서버에서 모바일 앱 클라이언트의 권한을 취소하여 더 이상의 액세스 토큰이 제공되지 않도록 하는 것입니다.

만료일(모바일 1주)을 설정할 수 있습니다. 사용자 필드 refreshId사용자의 경우(UUID를 사용할 수 있습니다).다음 세트는 클레임 매개 변수("iat")에서 발행됩니다. 게가refreshId합니다.그런 다음 토큰을 검증할 때마다 토큰의 "사용 기간"을 확인해야 합니다.하고 1/2 DB를 선택해야 합니다.refreshId값을 지정하고 현재 "iat" 값으로 새 토큰을 만들어 모바일 장치로 보냅니다.토큰을 비활성화해야 할 경우 다음에 대한 새 값을 생성합니다.refreshId1시간 후에는 모든 토큰이 잘못되므로 사용자는 모든 기기에 다시 로그인해야 합니다.필요한 경우 더 많은 맞춤형 솔루션을 만들 수 있습니다.

언급URL : https://stackoverflow.com/questions/42763146/does-it-make-sense-to-store-jwt-in-a-database

반응형