스프링 부트로 OAuth 2.0를 만들기로 하면서 OAuth 2.0에 대해 공부하는 중이고 알게 된 내용을 정리하려고 한다.
카카오 간편 로그인과 RFC문서를 참조하였으며 api 명세는 카카오 간편 로그인과 거의 동일하다.
보안에 가장 적합하다고 판단되는 Authorization Code 방식에 대한 내용만 작성하였다.
먼저 인증에 필요한 용어들
1. Resource Owner : 자원 소유자 (사용자)
2. Client : 사용자가 사용할 어플리케이션
4. Authorization Server : 인증 서버 (권한 서버). 어플리케이션을 사용하기 위해 인증절차를 수행해야 하는 서버
5. Resource Server : 어플리케이션에서 사용할 데이터가 저장되어있는 서버
6. User-Agent : 사용자가 클라이언트를 사용하는 소프트웨어 (브라우저, 모바일폰,,)
절차
(사용자가 어플리케이션을 이용하기위해 로그인을 하고 어플리케이션을 이용하는 과정, RFC문서의 그림을 이해한 대로 재구성하였다.)
Authorization Code Grant
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B1)
+----|----+ Client Identifier +--------------+
| -+---(A2)-- & Redirection URI --->| |
| User- | | Authorization|
| Agent -+---(B2)-- User authenticates -->| Server |
| | | |
| -+---(C1)-- Authorization Code --<| |
+-|----|--+ +--------------+
| | ^ v
(A1) (C2) | |
| | | |
^ v | |
+---------+ | |
| |>---(D)-- Authorization Code --------' |
| Client | & Redirection URI |
| | |
| |<---(E)----- Access Token ------------------'
+---------+ (w/ Optional Refresh Token)
1. 사용자가 클라이언트(어플리케이션을)사용할때 클라이언트(어플리케이션)은 인증을 하기 인증서버로 인증 코드를 요청한다.
(A2) Reqeust GET /oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code
로그인 페이지가 반환된다.
2. 로그인
2-1. (B1) 로그인 페이지를 받은 사용자는 아이디, 패스워드를 입력한다(약관 동의)
(B2) 인증 정보가 인증서버로 넘어간다.
2-2. B2로 인하여 인증정보를 받은 인증서버는 인증 후 (아이디 패스워드 일치 확인) 인증이 완료되면 토큰을 발급받기 위한 인증 코드를 발급해준다. 이때 A2에서 넘긴 redirect_uri로 리다이렉트 하도록 응답을 보낸다
(C1) Response 302 Location: {redirect_uri}?code={authorize_code}
(C2) 브라우저는 C1에서 받은 정보로 리다이렉트를 보낸다.
2-3. 리다이렉트를 받은 곳(클라이언트)에서 클라이언트 정보와 방금 받은 인증 코드를 가지고 인증서버로 토큰 발급 요청을 보낸다
(D) POST /oauth/token
(E) 토큰 정보가 반환된다.
https://tools.ietf.org/html/rfc6749#section-4.1
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
'공부 > etc' 카테고리의 다른 글
Netlify에 가비아에서 구매한 도메인 연결하기 (1) | 2021.04.19 |
---|---|
메일 송수신 프로토콜(POP3, IMAP, SMTP) (0) | 2020.01.06 |
파이썬_웹크롤링_스크리피 (0) | 2018.02.07 |