Inflearn brand logo image

인프런 커뮤니티 질문&답변

성호님의 프로필 이미지
성호

작성한 질문수

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

소셜 로그인 (4) - 소셜 로그인 구조 설계

OAUTH2 질문

작성

·

51

0

로그인시도 -> Securty -> FILTER 사용자가 DB에있으면 OK -> JWT발급

이 흐름이 맞는지요..?

 

그리고 OAUTH2는

 

로그인시도 -> 카카오 코드받아서 인증을 받고 -> 토큰으로 사용자 정보를 가져와서 로그인 -> 로그인 후 jwt발급

근데 궁금한게 oauth2도 회원가입이 왜 필요한걸까요? 시큐리티때문이라고한다면 토큰으로 사용자정보를 가져오는걸로 db에서찾은거처럼 판단을 못하는지요

제가 헷갈리는게 jwt든 oauth2든db하고 관련이 어떻게잇는건지가 헷갈립니다 jwt도 db에서 사용자정보를 가져와서 담을수도있지않나요?

 

oauth2가 db에 사용자정보가 왜필요한지도 헷갈립니다 만약 사용자정보가 저장이 최초에 된다면 그다음부터는 그냥 oauth2로그인으로 안타는건지 그냥 security의 로그인을 타는건지 궁금합니다.

 

그리고 현재 강의에서는 시큐리티를 안쓰고

openfeign를 쓰셔서 코드를 받고 그 코드로 요청을 보내서 토큰을 받고 그 토큰으로 사용자정보를 받는걸로 이해를 했습니다. 시큐리티에서는 해당과정이 없는걸로 알고있는데 맞는지요

답변 2

0

구파고님의 프로필 이미지
구파고
지식공유자

안녕하세요. 질문 주신 내용 하나씩 답변드립니다.

1. 로그인시도 -> Securty -> FILTER 사용자가 DB에있으면 OK -> JWT발급 이 흐름이 맞는지요..?

흐름은 맞고 DB에 사용자 유무 관계없이 JWT는 항상 발급합니다. JWT를 우리가 제공하는 서비스를 사용하기 위한 일종의 열쇠같은 역할이라고 생각해주시면 됩니다.

해당 열쇠를 API 호출 시 같이 전달해야 인증이 필요한 API들을 사용할 수 있다고 봐주시면 됩니다.

2. oauth2 회원 가입 필요 이유

oauth 는 회원 가입할 때 필요한 정보들을 고객들이 직접 입력하지 않아도 쉽게 가져오고 추가로 필요한

정보들만 입력 받을 수 있다는 장점이 있습니다.(간편 회원 가입). 또한 카카오나 네이버같은 소셜 회원 가입 기능을

제공하는 곳에서 사용자에 대한 인증을 해주기 때문에 실명인증 등 따로 저희가 구현해야하는 기능들도 훨씬 적어집니다.

3. 회원 가입이 필요한 이유

소셜 로그인은 회원 가입 및 로그인을 좀 더 쉽게 도와주는 역할을 한다고 생각해주시면 됩니다.

사용자가 복잡한 회원 가입 과정을 거치지 않아도 쉽게 가입을 할 수 있는 것 입니다.

또한 저희 서비스에 가입을 시켜야 예를 들어 게시글을 쓴다고 했을 때 어떤 사용자가 게시글을

썼는지 회원 id를 지정해줄 수 있을테고, 일반적인 서비스라면 회원 DB를 직접 관리해서 이벤트를 한다고

했을 때 해당 회원의 아이디로 push알림을 보내준다던가 기타 기능 등을 구현할 수 있을 것 입니다.

또한 회원 가입을 하지 않는다면 현재 우리 서비스의 회원이 몇명인지에 대한 기본적인 것들도 알 수 없을 것 입니다.

4. 만약 사용자정보가 저장이 최초에 된다면 그다음부터는 그냥 oauth2로그인으로 안타는건지 그냥 security의 로그인을 타는건지 궁금합니다.

저장이 된 이후에도 소셜 로그인을 진행 시 회원 정보를 가져오고 해당 회원이 이미 가입이 되어있다면 로그인이 되었다는 의미로

JWT만 사용자한테 발급합니다. security 로그인이라는게 스프링 시큐리티를 말씀하시는거 같은데 현재 강의에서는 security 관련한 코드는 없습니다!

5. openfeign를 쓰셔서 코드를 받고 그 코드로 요청을 보내서 토큰을 받고 그 토큰으로 사용자정보를 받는걸로 이해를 했습니다.

시큐리티에서는 해당과정이 없는걸로 알고있는데 맞는지요

스프링 시큐리티에서는 아이디와 비밀번호를 입력하면 해당 정보를 세션을 통해서 관리합니다.

시큐리티만 사용한다면 위에 말씀하신게 맞고, 스프링 시큐리티와 oauth를 다 사용하신다면

JWT를 사용자한테 발급 후 사용자가 토큰을 보냈을 때 해당 토큰에 있는 정보를 통해서 세션에 현재 로그인한 사용자의 정보를 유지하는 등 함께 사용하는 방법도 있습니다.

성호님의 프로필 이미지
성호
질문자

구파고님 감사합니다 친절한 답변덕분에 많이 정리되었고 해소되었습니다. 강의끝까지 완강하고 더 공부해보겠습니다. 다른강의도 내어주시면 듣겠습니다

구파고님의 프로필 이미지
구파고
지식공유자

정리가 많이 되셨다니 다행입니다! 인증쪽이 아무래도 복잡하고 어렵다보니 처음 보실 때 많이 헷갈리실겁니다. 저도 게을러져서 다른 강의는 준비하고 있는게 없긴한데 힘이나네요. 완강까지 화이팅입니다!

0

안녕하세요, 인프런 AI 인턴입니다. 성호님.

OAuth2와 데이터베이스(DB)의 관계, 그리고 JWT 발급 과정의 흐름에 대한 이해를 돕기 위해 설명드리겠습니다.

  1. JWT와 보안 흐름:

    • 로그인 시도: 사용자가 애플리케이션에 로그인을 시도하면, Spring Security 또는 필터를 통해 인증이 시작됩니다.
    • Security 및 Filter: 여기서 사용자가 DB에 저장되어 있는지 확인하고, 일치하면 인증에 성공하여 JWT 토큰을 발급합니다. JWT는 사용자의 인증 정보를 안전하게 클라이언트에게 전달하는 데 사용됩니다.
  2. OAuth2와 회원가입:

    • OAuth2 로그인: 사용자가 카카오 로그인을 시도하면, 먼저 카카오로부터 인증 코드를 받습니다.
    • 토큰 발급 및 사용자 정보 조회: 인증 코드를 바탕으로 Access Token을 발급받아 사용자 정보를 가져옵니다. 이 과정에서 DB에 사용자의 정보가 없다면 새로운 사용자로 간주하고 회원가입 절차를 거쳐야 할 수 있습니다.
    • 회원가입 필요성: OAuth2를 처음 사용할 때는 사용자 정보가 DB에 없기 때문에 이를 저장하여 사용자 관리 및 로깅, 분석 등의 기능에 활용할 수 있습니다. 이후 로그인 시에는 DB에서 사용자를 검증하고, JWT를 발급하여 사용합니다.
  3. 데이터베이스와의 관계:

    • JWT와 DB: JWT는 자체적으로 사용자 정보를 포함할 수 있기 때문에, 매번 DB를 참조할 필요 없이 해당 정보를 이용하여 인증을 수행합니다. 다만, 특정 사용자 상태나 권한 변경 시에는 DB 연동이 필요할 수 있습니다.
    • OAuth2와 DB: 비슷하게 OAuth2도 로그인 시 사용자 정보를 DB에 저장함으로써 사용자를 관리하고, 변동 사항이 있을 때 이를 반영할 수 있습니다.
  4. 이 강의에서의 OpenFeign과 Security:

    • 강의에서는 OpenFeign 클라이언트를 사용하여 외부 API(카카오)를 호출하고, 그 응답으로부터 토큰 및 사용자 정보를 얻어옵니다. 이는 보통 OAuth2 인증 과정에서 사용되는 방식 중 하나입니다.
    • Security에도 OAuth2가 통합되어 있어 기본 동작은 제공하지만, 세부 구현이나 커스터마이징에는 위처럼 별도의 클라이언트(Fegin 등)를 사용하는 경우가 많습니다.

관련된 질문과 답변 링크를 확인하시어 추가적인 정보를 얻어보세요:
- OAuth2 관련 토론
- 클라이언트와 서버 간 인증 흐름

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

성호님의 프로필 이미지
성호

작성한 질문수

질문하기