OAUTH2 로그인을 구현하려면 SNS서버(이하 구글)와 내가 제작한 서버(이하 우리 서버)가 필요하다. 사용자가 우리 서버에 로그인하기 위해서 필요한 정보들을 구글이 우리 서버에 보내줘야한다. 이를 위해서는 우리 서버가 accessToken을 사용해 구글 API에서 사용자 정보를 요청해야 한다. 이 값이 있어야 구글 API로 사용자 정보를 요청하고, 구글이 이에 응답한다.
리다이렉트는 GET요청이다. GET 요청은 ResponseBody에 정보를 담을 수 없다. 따라서 URL에 사용자 정보를 담아야한다. 이렇게 돌 경우 유출 위험성이 커진다. 따라서 구글은 URL에 인가 코드를 포함해 우리 서버로 리다이렉트한다.
그렇지 않다. 인가 코드는 단독으로는 사용할 수 없다. 구글은 accessToken 발급 요청 시, 인가 코드와 함께 사전에 등록된 리디렉션 URI, 클라이언트 ID/시크릿 등의 정보를 검증한다. 이 과정에서 하나라도 맞지 않으면 토큰 발급이 거부된다. 따라서 인가코드의 유출은 치명적이지 않다.
2가지 방법이 있다.
1. 인가 코드를 프론트에서 받고 백엔드에서 accessToken을 발급하는 방식
2. 인가 코드를 백엔드에서 받고 백엔드에서 accessToken을 발급하는 방식
프론트엔드에서 인가코드를 받고, 나머지 작업은 백엔드에서 처리하는 방식
프론트에서 구글 로그인이 진행되면 구글은 리다이렉트로 프론트에 인가 코드를 반환한다.
프론트는 받은 인가 코드를 백엔드에 전달한다. 전달하는 동시에 이제 프론트는 백엔드의 응답을 기다린다.
이후의 과정은 구글과 백엔드의 통신이다. 즉, 인가 코드를 프론트에서 받아 백엔드로 전달하는 부분이 차이점이다.
이후의 과정은 아래의 그림과 같다.
oauth2-client 의존성을 통해 서버에서 인가코드, token발급, 사용자 요청 모두 처리하는 방식
프론트에서는 백엔드의 특정 주소로 이동하기만 한다. 해당 주소에 접근하면 바로 oauth2 로그인 과정이 시작된다. 프론트는 로그인 과정에 개입하지 않는다. 대부분의 과정은 oauth2-client 라이브러리가 도맡아 처리한다.
마지막 jwt 반환 과정에 백엔드에서 프론트로 리다이렉트가 발생한다. 리다이렉트는 get 요청이므로 body를 사용할 수 없다. 따라서 생성된 jwt 정보가 url에 담겨 전달된다.
장점)
단점)
클라이언트 ID?
사전에 oauth2 약속을 할 때 구글이 우리 서버의 요청임을 식별하기 위해 지정해둔 정보
장점)
단점)