• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

인가 처리 로직에 대한 문의

23.08.03 15:02 작성 조회수 214

0

안녕하세요 JWT 를 사용하여 Security 를 통해 애플리케이션을 ㄱ구축해봤었는데, 그 당시에는 JWT Token 을 강사님이 사용해주신 부분과 다르게 사용하였는데 문의 사항이 생겨서요!

궁금한 부분은 verify() 를 하는 부분입니다.

JwtToken 에는 ID 정보만을 넣었습니다. 그걸 통해서 verify 이후에 AuthorizationFilter 에서 직접 Member 를 DB 에 저장되어 있는지 확인하여 가져온 이후 LoginUser 정보를 만들어 SecurityContext 에 저장하였습니다. 강사님의 코드는 TOKEN 정보가 있는지, TOKEN 정보가 있으면 거기서 ID 와 ROLE 정보를 가져올 수 있는지만을 확인하고 있습니다.

이렇게 하면 TC 에서 확실히 간단해지는 면모도 있고, 사실 JWT 토큰 자체도 그렇게 의존할만한게 아닌 것으로 알기 때문에 의존성을 줄일 수도 있는 것 같고, 스프링 단에서도 어떤 방식으로 지속적인 구현을 하면 (가령, SecurityContext 에 저장된 사람의 정보가 필요할 때 비로소 id 를 가지고 와서 확인하는 등) 괜찮을 것 같다고 생각이 들었습니다.

보통 실무에서는 어떤 방식으로 하는지 궁금합니다!

답변 2

·

답변을 작성해보세요.

0

저렇게 할 수 있는 장점이 있는 것이 토큰입니다. ㅎ

토큰 사용하실때는 DB에서 조회하실 필요 없습니다!!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.05

안녕하세요, 인프런 AI 인턴이에요. JWT를 사용한 인가 처리 로직에 대한 질문이시군요.

일반적으로 JWT 토큰에는 사용자의 ID와 ROLE 정보 등을 포함시킵니다. verify()는 토큰의 유효성을 검증하는 과정으로, 토큰이 변조되지 않았는지, 만료되지 않았는지 등을 확인합니다.

강사님의 코드에서는 verify() 이후에 토큰에 포함된 ID와 ROLE 정보를 가져오지 않는 것으로 보입니다. 대신, AuthorizationFilter에서 DB에 접근하여 해당 ID를 가진 회원 정보를 가져와서 LoginUser 정보를 생성하고 SecurityContext에 저장하는 방식을 사용하고 계신 것으로 이해했습니다.

일반적으로 실무에서는 어떤 방식을 사용하는지에 대해서는 정해진 규칙이 없습니다. 보안 및 퍼포먼스 요구사항, 시스템 구조 등에 따라 다양하게 구현할 수 있습니다. JWT 토큰을 인증에만 사용하고 나머지 정보는 DB에서 가져오는 방법도 일반적으로 많이 사용하는 방식입니다.

또한, JWT 토큰의 사용 여부는 선택사항이며, 토큰 자체의 의존성을 줄일 수 있는 다른 인증 방식을 사용해도 무방합니다.

따라서 실무에서는 강사님이 사용하신 방식과 같이 JWT 토큰에 필요한 정보만을 담고 나머지 정보는 DB에서 가져오는 방식을 선택하거나, JWT 토큰에 필요한 모든 정보를 담아 사용할 수도 있습니다. 구체적인 구현은 팀 혹은 프로젝트에 따라 다르기 때문에, 팀 내의 개발자들과의 의논이 필요한 경우도 있을 것입니다.

질문해주신 내용에 따라 의견을 제시해드리긴 했으나, 실제로 어떤 방식을 사용해야 하는지에 대한 판단은 프로젝트의 요구사항과 개발자의 판단에 따라 달라질 수 있습니다. 실무에서는 보안, 성능, 확장성 등을 고려하여 적절한 방식을 선택하게 됩니다.

더 자세한 내용이 있으시면 구체적인 상황을 알려주시면 추가적인 도움을 드릴 수 있을 것 같아요. 부족한 답변이라면 양해 부탁드리고, 궁금한 내용이 있으면 언제든지 질문해주세요. 즐거운 개발 되세요!