Oauth - Google API

.·2021년 4월 11일
0
post-thumbnail
post-custom-banner

우리는 HTTP Request 를 통해 Google API를 사용한다.

Oauth 의 원리를 공부하기 위해 HTTP/REQUEST를 통해 API를 요청하지만,
실제 서비스에선 보안상 SDK 를 통해 API를 사용하는 것이 좋다.

진행 순서 :
1. 구글에 Client 등록해 Client ID, Secret 발급 받기
2. 사용자의 인증을 통해 authorization Code 발급 받기
3. 발급 받은 Client ID, Secret, authorization Code를 통해 Access Token 발급 받기
4. 발급 받은 Access Token을 통해 사용자의 구글 정보에 접근하기

출처 : https://opentutorials.org/course/2473/16571 생활코딩


Client ID, Secret 만들기

google cloud platform 에 접근한다.

그림처럼 Oauth 클라이언트 ID를 생성해준다.
생성하면 클라이언트 ID와 Secret 을 구글이 만들어주는데
이를 통해 authorization code를 요청할 수 있다.


authorization Code 요청하고 발급 받기

Resource Owner 인 사용자가
Resource Server인 google에 접근해서 Client인 우리 서버의 접근을 허용하면
우리의 서버는 authorization code 를 요청해 authorization code 를 발급 받을 수 있다.

authorization Code 요청

google reference 예시 :

그림처럼 요청를 보내면, authrized code를 발급 받을 수 있다.
scope 는 Client인 우리 서버가 하고자 하는 일을 적는데,
나는 사용자의 캘린더 리스트 정보를 가져오고 싶기 때문에 아래 그림처럼

https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.readonly 을 넣어준다.
redirect_uri 은 사용자가 인증을 끝내면, 우리 서버에 authorization code를 응답 받는 주소이다.
이는 구글에 등록을 해줘야하는데, 아래 그림처럼 등록 해주면 된다.

authorization Code 응답

마지막으로 발급 받은 client_id 넣고 요청을 하면 아래와 같이 authorization code를 응답받는다.
( error 또는 code )


Access_Token 요청하고 발급 받기

Access_Token 요청

마지막으로 전달 받은 authorized code, client ID, secret 정보를 담아 Google에 요청하면,
Access_Token을 발급 받을 수 있다.

Goolgle reference 예시 :

redirect_uri 는 좀 전에 authorized code를 응답 받았던 그 redirect_uri 주소로 지정해야 한다.

예시 코드 : )

Access_Token 응답

그림과 같이 Access_token 요청을 보내면 Redirect_uri 주소에 아래와 같이 응답이 온다.

access_token : access_token 값
expires_in : 만료 시간 (초)
refresh_token : refresh_token( 사용자가 처음 로그인 했을 때 딱 한번 응답 받는다 )

앞으론 발급 받은 Access_token 을 통해 사용자의 캘린더 리스트 정보를 가져올 수 있다.


Access_token 을 통해 사용자 정보 가져오기

Access_token을 통해 사용자의 캘린더 정보 요청하기

google reference 예시 :

우리는 캘린더의 정보를 가져올 것이기 때문에
https://www.googleapis.com/calendar/v3/users/me/calendarList?accesstoken=“발급받은AccessToken“
위 주소로 요청을 보내면 사용자의 캘린더 정보를 응답 받을 수 있다.

사용자의 캘린더 정보 응답

google reference 예시 :

위 그림과 같이 사용자의 캘린더 정보를 응답 받을 수 있다.


Refresh Token

만약 Access_Token의 만료시간이 지난다면 사용자는 또 다시 구글에 로그인해서 Authorized Code를 발급받고, Client 는 다시 Access_token을 발급 받아야 한다.

하지만 이 과정은 굉장히 귀찮고, 좋지 않은 방법이기 때문에 구글에서는 access_token이 응답 받을 때 같이 보내준다.
처음 사용자가 로그인 했을 때만 refresh_token을 발급해주기 때문에,
Access_token과 마찬가지로 서버나 DB에 잘 저장해두어야한다.

refresh_token을 통해 Access_token 재발급 받기

google reference 예시 :

예시 ) 아래 그림처럼 요청을 보내면

아래 그림처럼 Access_token이 재발급 받아 응답이 온다.

profile
.
post-custom-banner

0개의 댓글