✔ 등록 (Register)
Resource Server에 새로운 Client를 등록합니다.
- Client ID : 애플리케이션 식별 ID (노출 가능)
- Client Secret : 식별 비밀번호 (노출 X)
- Authorized Redirect URLs : server로부터 데이터를 받을 주소
✔ Resource Owner의 승인
Server의 데이터를 Client에서 사용하는 것에 동의하는 사용자의 권한 승인이 필요합니다.
-
Owner → Client : 특정 작업 요청
-
Client → Owner : Server요청을 위한 화면 전송
서버 요청 버튼의 링크 (ex Google/Naver Login 버튼)
https//resource.server?client-id=1&scope=B,C&redirect-uri=http//~-
client_id
: 요청을 보내는 클라이언트 ID -
scope
: server에 요청할 작업 목록(ex, username가져오기.. 등) -
redirect_uri
: 요청 완료 시 이동할 주소 (서버에 저장된 주소와 다르면 이동 x)
-
-
Owner → Server : 버튼 클릭 시, 위 주소로 서버에 접속 요청
-
Server → Owner : 로그인 여부 확인 후, 로그인 창 전송
-
Owner → Server : 로그인
-
Server → Owner :
1).
client_id
값이 있는지 확인2). 요청받은
redirect_uri
값과 저장된redirect_uri
값이 같은지 확인 (다르면 종료)3). 1,2 가 일치하면
scope
에 해당되는 권한을 client가 사용하는 것에 대한 동의창 전송 -
Owner → Server : 권한에 동의하면 Server에
userId
와scope
에 해당하는 데이터가 저장됨(
userId
에 해당하는 Owner는scope
데이터에 대한 권한을 동의하였음을 뜻합니다)
✔ Resource Server의 승인
Server에서 accessToken을 발급하기 전, Resource Owner가 요청한 Client 정보가 일치하는지 확인합니다.
-
Server → Owner → Client : authorization code 전송
Client에 authorization code값이 저장됨 (
Location
: https//client/~~?code=3 ) -
Client → Server : Server에 직접 접속하여 전송.
https//resource.server/token?grant-type=authorization-code&code=3&redirect-uri=http//client/callback&client-id=1&client-secret=2
-
grant_type
: 3자 인증 방식 (authorization_code) -
code
: authorization_code 값 -
redirect_uri
/client_id
/client_secret
: Client 정보
-
-
Server : 요청 받은 authorization_code 에 해당하는 정보의
redirect_uri
client_id
/client_secret
값이 일치 하는 지 확인
✔ Access Token 발급
-
Server에서 Client의 요청이 승인되면 저장된 authorization_code를 삭제합니다.
-
Authentication Server에서 Access Token을 발급한 후 Client에 전달합니다.
→ Client는 발급받은 Access Token으로 Resource Server에 데이터 요청을 할 수 있습니다.
✔ API 호출 (데이터 가져오기)
Server로부터 API 데이터를 불러오는 방법은 2가지가 있습니다.
- Access Token을 쿼리 파라미터로 전달하는 방법
https//www.googleapis.com/calendar/v3/users/me/calendarList?access_token=<access_token>
- Authentication : Bearer HTTP header로 전달하는 방법 (preferred)
Authentication : Bearer <access_token>
curl -H "Authorization: Bearer <access_token>" https//www.googleapis.com/calendar/v3/users/me/calendarList
✔ Refresh Token 발급
- Access Token의 유효기간이 만료되면 Client는 Authentication Server로 Refresh Token 발급 요청을 합니다.
- Server는 새로운 Access Token을 발급하여 Client에 전달합니다.
REFERENCE
Youtube 생활코딩 OAuth 2.0 https://youtu.be/hm2r6LtUbk8