작성
·
83
0
카카오, 네이버같은 소셜로그인이 아닌, 자체 로그인을 통한 검증을 구현하려고 하는데 프론트가 react 이므로 jwt 토큰을 사용한 검증을 진행하려고 합니다. 그러면 이를 구현하기 위해서 jwt 토큰을 발급하는 oauth2 authorization server와 발급한 jwt토큰을 검증하는 oauth2 Resource Server와 자체적으로 만든 시큐리티 인가서버에 code와 토큰을 요청하는 oauth2 client api를 전부 사용해야하는건가요? 즉, jwt를 통한 자체로그인 검증기능을 구현하려면 지금까지 학습한 oauth2 client + oauth2 Resource Server + oauth2 Authorization Server 3개 api를 전부 사용해 구현해야 하는건가요?
답변 2
0
네 모두 필요한 것은 맞습니다.
다만 시스템 환경이나 상황마다 다 필요할 수도 있고 그렇지 않을 수도 있습니다.
그리고 react 와 같은 기술로 할 경우에는 3가지 모두에 대한 충분한 이해를 필요로 합니다.
기본적으로 시큐리티는 모바일이나 비동기가 아닌 HTML 페이지 기준으로 최적화 되어 있기 때문입니다.
그래서 상황에 따라 여러가지 커스텀한 구현이 필요할 수 있는데 프레임워크에 대한 전반적인 원리를 확실하게 이해하지 못하면 커스텀한 구현이 어려울 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 에욱님!
자체 로그인 시스템을 구성하실 때, 특히 React와 같은 프론트엔드와 JWT를 사용하고자 한다면, OAuth2의 여러 컴포넌트를 활용하시는 게 유리할 수 있습니다. 그러나 모든 상황에서 모든 컴포넌트를 다 사용할 필요는 없습니다. 다음은 각 컴포넌트의 역할에 대한 간단한 설명과 함께 기본적인 구성 예시를 제공드리겠습니다.
OAuth2 Authorization Server: 이 서버는 클라이언트가 인증 사용자에 대한 액세스 권한을 요청할 수 있도록 JWT 토큰을 발급합니다. 자체 로그인 구현 시 사용자 계정 정보를 이곳에서 관리하게 됩니다.
OAuth2 Resource Server: Resource Server는 클라이언트로부터 들어오는 요청에 포함된 JWT 토큰을 검증하여, 해당 토큰이 유효한지 확인하고, 사용자에 대해 접근을 허용합니다. 이들은 주로 보호된 API를 제공합니다.
OAuth2 Client: 이 부분은 보통 API 클라이언트가 Authorization Server로부터 토큰을 얻는 데 사용됩니다. 자체 로그인에서는 이 클라이언트가 꼭 필요하지 않을 수 있으며, 인증된 사용자를 토큰으로 교환하는 단계에서만 필요할 수 있습니다.
Authorization Server: 기본적으로 필요한 부분입니다. JWT 토큰을 발급하며, 사용자 인증을 처리합니다. Spring Authorization Server 등을 활용해서 구현할 수 있습니다.
Resource Server: 보호된 리소스에 대한 접근을 관리합니다. JWT의 유효성을 검사하고 사용자의 권한을 검증합니다.
JWT 사용: 서버에서 발급한 JWT는 클라이언트와 서버 사이의 인증 정보로 사용되며, 클라이언트가 보호된 API에 접근할 때마다 이 토큰을 헤더에 포함해 요청합니다.
프론트엔드가 React인 경우, JWT를 localStorage
나 sessionStorage
에 저장하여 이후 요청 시 Authorization 헤더에 포함시켜 전송함으로써 인증을 유지할 수 있습니다.
따라서, 자체 로그인 시스템을 구현하고자 한다면 기본적으로 Authorization Server와 Resource Server가 필요하며, OAuth2 Client는 상황에 따라 사용 유무를 결정하실 수 있습니다.
참고할 만한 유사한 구현 예시는 다음 링크들을 통해 확인해보세요:
- Spring Boot에서 JWT Authentication 구현하기
- OAuth2 Authorization Server 활용 SSO 구축
저는 에욱님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.