728x90
본 포스팅은 생활코딩의 '구글 API를 통해서 배우는 인증' 강좌를 보고 공부한 내용을 토대로 작성했습니다.
더보기
Reference
- 생활코딩 강좌 - 구글 API를 통해서 배우는 인증
- Google OAuth 2.0 API document
동작 메커니즘
🧑Resource Owner(사용자)
↔ 📱Client(서비스)
↔ 💾Resource Server(데이터 서버)
- 보안의 문제 발생! → 해결
💾 Resource Server
→ 📱 Client
Client ID
+ Client Secret
제공
- 🧑
Resource Owner
가 📱Client
(서비스)를 통해 💾Resource Server
API에 자신의 개인정보 사용을 승인함- 개인정보 사용 승인 : Scope List를 포함한 개인정보
- 💾
Resource Server
— code 발급 → 📱Client
- 📱
Client
— id, secret, code 전송 → 💾Resource Server
- 데이터의 유효성 판단 후 💾
Resource Server
— access token 발급 → 📱Client
→ (인증 완료!) - 📱
Client
는 받은 access token 을 따로 저장해두고 해당 서비스를 이용할 때 사용 - 💾
Resource Server
는 access token 값이 이전에 발급한 기록이 있는 값이면 서비스 이용을 허용해줌
Scope List 지정
: Client id, Client Secret 발급 후, 사용할 API를 따로 설정함
💡 만약 보안상의 이유로 Id 및 Secret이 노출되어도 기존에 허용해둔 서비스 이외에는 이용이 불가하므로 2차 피해를 막을 수 있음!
- Scopes
: 데이터 이용시 사용자 및 Oauth 서버에 사용 목적에 따라 사용 데이터의 범위를 지정하는 것
1. 사용자 인증 리다이렉션 요청
- 요청 형식
https://accounts.google.com/o/oauth2/v2/auth?
scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly&
access_type=offline&
include_granted_scopes=true&
response_type=code&
state=state_parameter_passthrough_value&
redirect_uri=https%3A//oauth2.example.com/code&
client_id=client_id
- 파라미터 정보
scope
: client에서 이전에 정의해둔 데이터의 이용 범위access_type
: access token 의 생명주기 결정
- 가능한 값(
online
/offline
) offline
일 경우, access token 과 refresh token 둘 다 넘겨줌- refresh token : access token 의 사용기한이 끝났을 경우, 사용자🧑 에게 다시 요청을 보낸다.
- 가능한 값(
response_type
: 요청하는 데이터 타입redirect_uri
: 요청에 대한 응답 code를 받을 📱client의 주소
⭐ 내가 사용하고 있는 서버의 주소
⭐ 파라미터 요청 시, URL Encoder를 통해 형식을 변환해준다!
- 기입한
redirect_uri
는 API 관리 페이지에도 동일하게 넣어준다.
2. OAuth 서버 응답 처리
사용자 인증이 정상적으로 완료되면 💾oauth 서버가 code 데이터를 📱client 에게 URL을 통해 넘겨준다.
- code 응답 결과 예시
https://oauth2.example.com/auth?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7
💡 이때 받은 code 는 한번밖에 쓸 수 없다.
3. access token 발급 요청하기
📱client 는 URL을 통해 받은 code 와 client_id, client_secret, redirect_uri, grant_type 을 함께 기입하여 💾oauth 서버와 통신하여 access token 을 받는다.
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=https%3A//oauth2.example.com/code&
grant_type=authorization_code
이때 redirect_uri 는 이전에 '1. 사용자 인증 리다이렉션 요청 기입' 단계에서 기입한 redirect_uri 와 동일한 값을 넣어줘야한다!
4. access token 받아오기
- access token 응답 결과 예시
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"token_type": "Bearer",
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
"refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}
expires_in
는 현재access_token
이 언제까지 유효한지 시간을 나타낸다.
728x90
'🏠 Framework > Node.js' 카테고리의 다른 글
[WebRTC] mediasoup로 webRTC SFU 구현하기 (2) | 2022.10.02 |
---|---|
[WebRTC] WebRTC Overview, NAT, STUN (0) | 2022.08.07 |
[Socket.io] WebSocket 동작 원리(직접 구현) (0) | 2021.10.30 |
[Socket.io] WebSocket 개발 환경 세팅 (0) | 2021.10.28 |