OAuth2.0
- Open API로 제공되는 표준 인증 방법
- 쉽게 말해서 (Naver, Kakao, Google, Facebook)에 가입된 사용자 정보로 내가 만든 서비스에 인증(로그인)을 하는 것
OAuth2.0의 4가지 주요 객체(역할)
Resource Owner- 로그인을 요청하는 사용자, 즉 인증 정보의 주인
ClientResource Owner의 자원에 대한 접근을 Authorization Server에 요청하는 서비스(내가 만든 백엔드 서버)
Authorization ServerResource Owner의 요청으로 사용자를 인증하고, 인증 토큰, access token을 발급해주는 인증 서버
Resource ServerResource Owner의 자원을 가지고 있는 서버, access token을 발급받은 Client가 요청하면, 권한을 검증해서 자원을 반환
인증 절차

- 사용자가 ‘카카오 로그인’ 버튼을 눌러 인증 시도(redirect_url을 함께 전달해서 인증이 완료되면
Client 서버로 redirect)
GET /oauth/authorize?client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}&response_type=code HTTP/1.1
Host: kauth.kakao.com
- 서버
Authorization Server는 사용자를 인증하고 인가 코드를 발급(1번에서 전달받은 redirect_url로 인가 코드를 전달) 인가 코드를 전달받은 Client는 Authorization Server에 인가 코드를 전달하면서 access token 발급을 요청함
POST /oauth/token HTTP/1.1
Host: kauth.kakao.com
Content-type: application/x-www-form-urlencoded;charset=utf-8
access token을 이용해서 Resource Server에 사용자 정보를 요청함
- kakao developers
GET/POST /v2/user/me HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {ACCESS_TOKEN}
Content-type: application/x-www-form-urlencoded;charset=utf-8
네아로(네이버 아이디로 로그인)
- 전체적인 절차는 카카오랑 비슷함 (인가 코드를 callback 메소드로 받아오고, 인가 코드로 access token 발급)
CLIENT_ID, CLIENT_SECRET는 네이버 개발자 페이지에 애플리케이션을 등록하고 발급받은 정보를 입력하면 된다.- 아래에 매핑된 URI(“/auth/naver/login”)을 개발자 페이지에 callback method로 등록하면, 사용자가 로그인을 하면 아래 메소드가 호출됨
- 호출되면서 전달된 code와 state를 개발자 페이지에 나와있는대로 요청하면
access_token을 받아올 수 있음 @GetMapping("/auth/naver/login")
public ResponseEntity naverLoginCallback(String code, String state) {
RestTemplate rt = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("grant_type", "authorization_code");
params.add("client_id", CLIENT_ID);
params.add("client_secret", CLIENT_SECRET);
params.add("code", code);
params.add("state", state);
HttpEntity<MultiValueMap<String, String>> naverTokenRequest = new HttpEntity<>(params, headers);
ResponseEntity<String> response = rt.exchange(
"https://nid.naver.com/oauth2.0/token",
HttpMethod.POST,
naverTokenRequest,
String.class
);
return response;
}
네아로에서 access_token 사용하기
- 네이버 아이디로 로그인하고, 위에서 정의한 callback method가 실행되면
access_token이 발급된다. - 이
access_token이 실제 resoucre server에 자원을 요청할 때 사용되는데, 이는 아래 페이지를 참고해서 사용할 수 있다. - 접근 토큰을 이용한 profile api 호출
- 호출결과
