개발자
spring security와 소셜 로그인 , JWT를 같이 써보려고 개인적으로 연습을 하던 중 의문이 들어서 이렇게 질문을 올립니다. 제가 생각한 과정은 다음과 같습니다 1. 클라이언트가 서버에 구글 로그인 요청을 보낸다 {{BASE_URL}}/oauth/authorization/google -> 스프링 시큐리티에서 기본적으로 제공하는 로그인 경로입니다. 2. 서버에서 스프링 시큐리티의 과정에 따라 유저 정보를 가져온 후 데이터베이스에 저장하고 JWT을 발급한다. 3. 발급된 JWT를 클라이언트에게 response로 던져준다. 의 과정이였는데 생각해보니 3번의 발급된 JWT를 클라이언트에게 못던져주겠다는 생각이 들었습니다. 클라이언트에서 서버의 로그인 URI에 접근하면 이미 클라이언트의 손을 떠난 request가 되는데 response를 클라이언트에게 던져줄 방법이 없는 것 같아서,,, 혹시 이부분에 대해서 알려주실 수 있는지 궁금합니다. 클라이언트와 통신을 해야하는 상황이라면 클라이언트에게 인가 코드나 access_token을 받아서 서버에서 자체적으로 http 통신을 하는 방법밖에 없는지도 궁금합니다. security에서 OAuth2.0에 대한 인증 인가가 굉장히 편하게 만들어져 있다고 생각했는데 이런 부분에서 막히네요 ㅠ
답변 1
인기 답변
OAuth 2.0 인증 과정은 중간에 구글과 같은 인증 서버가 해주는 리다이렉션(redirection) 단계가 있는데요. 이 리다이렉션 URL로 요청이 들어왔을 때 JWT 토큰을 응답해줄 수 있습니다. 예를 들어, 사용자가 `https://accounts.google.com/o/oauth2/v2/auth?client_id=xxx&redirect_uri=https://www.myserver.com/token&...` 에 접속하여 구글을 통해 로그인에 성공하면 구글은 사용자를 `https://www.myserver.com/token`으로 리다이렉션 해줍니다. 따라서 `/token` 경로로 들어온 요청을 처리하는 컨트롤러에서 JWT 토큰을 발급하여 응답하는 로직을 구현하시면 됩니다. 말씀하신 것처럼 스프링 시큐리티를 사용하시면 빠르고 편하게 OAuth2.0 기반 인증을 개발할 수 있다는 이점이 있지만 이러한 OAuth 2.0의 세부 단계가 추상화되어 개발자에게 들어나지 않기 때문에 학습하시는 분에게는 오히려 독이 될 수도 있습니다. OAuth 2.0과 JWT를 이해하시는 도움이 되실 거 같아서 관련해서 예전에 블로그에 올려놓은 관련 포스팅을 공유드리겠습니다: - OAuth 2.0으로 구글 API 호출하기: https://www.daleseo.com/google-oauth/ - 구글 OpenID Connect 사용법: https://www.daleseo.com/google-oidc/ - JWT - Json Web Token: https://www.daleseo.com/jwt/ - 자바스크립트로 JWT 토큰을 발급하고 검증하기: https://www.daleseo.com/js-jwt/
Crayon
작성자
컴퓨터공학과 • 2023년 06월 28일
좋은 답변 감사합니다!!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!