사실 백엔드에서 1차 뉴비 절단기는 Auth 가 아닐까? 조심스레 말해본다.
백엔드 Resource 를 모두가 사용하는 경우는 거의 없다고 말할 수 있다. 따라서 Authentication 이란
거의 필수적인 요소이다. 거의 모든 서비스에 필요하기 때문에 백엔드 공부 초반에도 필요로 하는 내용이며
스프링에서는 Filter , Handler , Intercepter , Security 등 각종 내용에 연계 되어 공부가 많이 필요한 부분 이다.
물론 그런만큼 Reference Code도 많으며 관련 강의도 많다.
하지만 따라 친다고 내 것이 되냐? 그건 또 아니다... 복잡하고 어려운 만큼 많은 공부가 필요하다.
먼저 이번 파트 블로깅에서는 대표적인 로그인 기술 JWT - Oauth2 인증 방식에 대해서 알아 보도록 하자!
참고로 로그인 방식에는 Session , JWT 등이 있다.
Authentication
Authorization
Access Token
Refresh Token
JWT는 Header, Payload, Signature의 각각 세 부분으로 이루어지며, Json 형태인 각 부분은 Base64U로 인코딩 되어 표현된다. 또한 각각의 부분을 이어 주기 위해 .(dot) 구분자를 사용하여 구분한다. 추가로 Base64는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다.
각 부분별 상세 내용은 자료가 많으므로 생략!
다음 내용이 어려울 수 있다. 간단하게 설명 해보겠다!
구글 로그인을 대표적으로 생각 해봤을 때 다음과 같은 구조로 진행하게 된다.
간단하게
1. Google에 코드줘!
2. 서버는 코드 받고 구글 토큰 서버에 토큰 줘!
3. 서버는 받은 토큰으로 Google Auth에 정보를 요청 한다.
4. 회원 가입 , 토큰 생성 로직 ( 로그인 ) 실행
이게 끝이다. 간단하지 않나! Oauth2 도 사실 별거 없다. 그냥 정보를 가지고 있는 서버에 정보를 요청 하는 것 뿐
아래는 구글 로그인 Oauth2 를 Postman으로 처리하는 과정이다.
Google Public Docs를 참고했고 기본적인 HTTP 방식의 Oauth 요청이다. 가장 간단하고 자주 쓰이는 방법이다.
`https://accounts.google.com/o/oauth2/v2/auth`
여기서 Response Type 이 중요한데
Type을 두 가지를 줄 수 있음
token
code
로 두 가지를 선택 할 수 있다.중간 API 단계가 하나 더 필요한데
access Token을 받기 위해
[oauth2.googleapis.com](http://oauth2.googleapis.com)
로 다음 필드를 파라미터로 준다.
client_id
API Console Credentials page에서 가져온 클라이언트 ID입니다.
391325632115484-kfq4bh4gewgke6iiu7a428tjja1do9j1n.apps.googleusercontent.com
client_secret
Credentials page에서 가져온 API Console 클라이언트 보안 비밀번호
GOCGEWS-L3NJ2wegweinkkwOdMcUNmBsyjg35
code
초기 요청에서 반환된 승인 코드입니다.
앞서 받은 code 값
code_verifier
1단계에서 만든 코드 인증기
없어도 됨
grant_type
OAuth 2.0 사양에 정의된 대로 이 필드 값을 authorization_code
로 설정해야 합니다.
authorization_code
redirect_uri
지정된client_id
Credentials page
에서 프로젝트에 나열된 리디렉션 URI 중 하나입니다.
http://localhost:8080/oaut2/redirect/google
token으로 받을 경우 Google UserInfo 에 바로 접근 할 수 있는 Access Token을 얻게 된다. 이 경우 앱 또는 웹에서 파라미터로 가져오기 때문에 구글 정보 노출에 위험이 갈 수 있다.
또한 google refresh Token 또한 발급 받을 수 없다.
[https://accounts.google.com/o/oauth2/v2/auth](https://accounts.google.com/o/oauth2/v2/auth)
로 상기 파라미터 넣어 요청 https://www.googleapis.com
GET /oauth2/v2/userinfo HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token
return Google USER INFO
다음 포스팅은 이번 포스팅에서 다루지 못한 나머지 3개의 인증 방식과
Spring boot 에서 Oauth-Client , Security 의존성을 이용한 포스팅을 할려고 한다.