OAuth 과정은 다음과 같다.
1. 사용자에게 권한 요청 및 동의를 받는다. 그러면 authrization code를 획득한다.
2. authorization code를 가지고 구글에게 access token을 요청한다.
3. 발급 받은 access token을 가지고 사용자의 구글 계정에 대해 구글 api를 사용한다.
이번 글에서는 oauth 개념에 대해 충실히 다루는건 아니고, 직접 HTTP 요청을 하고 응답을 받아보면서 어떻게 동작하는지 확인하고 이해도를 높여보자.
oauth 인증
01. 구글 api 사용 등록 및 인증
- GCP 콘솔에서 새 프로젝트 생성
- 프로젝트 선택 후 API 및 서비스 → 라이브러리에서 사용하려는 구글 api 사용 (이 글에서는 구글 드라이브 사용)
- Oauth 동의화면 구성
- OAuth 2.0 클라이언트 ID 생성
- oauth 클라이언트 다운로드 후 client_id, client_secret 가져오기.
이때 client secret은 절대 외부에 노출되면 안된다!
02. Authorization code 요청하기
먼저 GCP 콘솔 - API 및 서비스 - 사용자 인증 정보 - OAuth 2.0 클라이언트 ID에서 요청에서 사용할 redirect uri를 등록한다.
- redirect uri는 사용자가 동의 후 이동하게 될 주소인데, 여기로 code를 실어 보내준다. (밑에서 동작을 보면 이해가 빠를 것임)
https://accounts.google.com/o/oauth2/v2/auth
?client_id=1065376047615-ca8n7aa2ncjdpp8lk1fh1hato0ensv99.apps.googleusercontent.com
&redirect_uri=http://localhost:8080/authcode
&scope=https://www.googleapis.com/auth/drive.readonly
&response_type=code
- scope는 사용자에게 요청할 권한의 범위이다.
- 여기서는 사용자의 구글 드라이브의 모든 파일에 대한 읽기 및 다운로드 권한을 받음
- 해당 http 요청은 프론트에서 진행돼야함
사용자 동의 후 redirect uri에 code를 포함하여 요청을 보냄
위의 링크로 들어가면 로그인이 나오고, 로그인 후 동의를 하면 redirect uri로 이동하게 된다.
redirect uri에서 중요한건 uri 뒤에 붙은 code 값이다.
code 부분이 authrization code다.
03. Access Token 요청
https://oauth2.googleapis.com/token 으로 POST 요청을 보낸다.
content-type : x-www-form-urlencoded
body의 다음 정보를 입력하고 요청을 보낸다. (한줄로 입력해아함)
code=4/0AX4XfWjIAPoQCbj4WWXIpkVOSXzDJ9GXTzzn51WPUgP0n18nPGpwBFoY4SAJpQ1PRsyyGQ
&client_id=1065376047615-ca8n7aa2ncjdpp8lk1fh1hato0ensv99.apps.googleusercontent.com
&client_secret=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&redirect_uri=http://localhost:8080/authcode
&grant_type=authorization_code
talend API라는 크롬 익스텐션을 사용해서 요청을 보냈다. (postman 같은 역할)
응답은 json 타입으로 온다. 발급받은 access_token으로 scope안의 구글 api를 사용할 수 있다.
한 authorization code로 토큰을 발급 받으면 그 code는 다시 사용할 수 없고, expired_in이 0이 되면 사용할 수 없다.
이렇게 oauth 인증 과정이 끝났다. 인증을 바탕으로 구글 api를 사용해보자.
구글 드라이브 api 사용
사용자의 구글드라이브에 있는 모든 파일 목록을 출력해보자.
구글 드라이브의 폴더 또는 파일의 링크를 보면 FileId가 포함있다.
GET https://www.googleapis.com/drive/v3/files
reference를 보면 access token을 헤더로 보내는 것을 알 수 있다.
요청을 보내면 다음과 같이 모든 드라이브의 파일 목록을 응답으로 받을 수 있다.
각종 파라미터를 추가해서 특정 파일에 대한 리스트를 불러 올 수 있다.
읽기 말고도, 파일 쓰기 수정 삭제 다운로드 등등을 api에서 제공한다.
다음은기회가 된다면 토큰의 유효기간과 refresh 토큰에 대해 다루고, API key를 이용한 API 사용을 다뤄보겠다.
+ Refresh 토큰으로 access 토큰 영구 사용
- auth code 요청시에 필드로 access_type=offline 추가. (사용자가 offline 상태일 때도 접근할 수 있다는 의미)
- access token을 요청하면 응답으로 refresh token을 포함함.
- 다음 요청으로 토큰을 재발급 받을 수 있음 https://oauth2.googleapis.com/token
Reference
'개발 > 기타' 카테고리의 다른 글
더 나은 테스트를 위한 지침 (0) | 2024.08.17 |
---|---|
[OAuth] oauth2 작동 방식 (0) | 2022.01.04 |
[IntelliJ] 로그 한 줄 표시 - 좌우 스크롤, 자동 줄바꿈 (0) | 2021.11.18 |
주피터에 여러 파일 한 번에 넣기 - 압축 파일 이용 (0) | 2021.05.25 |
윈도우에서 파이썬 다른 버전 사용 - Python2, 명령창, 환경 면수 (0) | 2021.04.30 |
댓글