728x90
본 포스팅은 생활코딩의 '구글 API를 통해서 배우는 인증' 강좌를 보고 공부한 내용을 토대로 작성했습니다.
더보기

 

동작 메커니즘

🧑Resource Owner(사용자) ↔ 📱Client(서비스) ↔ 💾Resource Server(데이터 서버)

 

  • 보안의 문제 발생! → 해결

💾 Resource Server → 📱 Client

Client ID + Client Secret 제공

 

  1. 🧑Resource Owner 가 📱Client (서비스)를 통해 💾Resource Server API에 자신의 개인정보 사용을 승인함
    • 개인정보 사용 승인 : Scope List를 포함한 개인정보
  2. 💾Resource Server — code 발급 → 📱Client
  3. 📱Client — id, secret, code 전송 → 💾Resource Server
  4. 데이터의 유효성 판단 후 💾Resource Server — access token 발급 → 📱Client
    (인증 완료!)
  5. 📱Client 는 받은 access token 을 따로 저장해두고 해당 서비스를 이용할 때 사용
  6. 💾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

 

 

 

웹 서버 애플리케이션에 OAuth 2.0 사용  |  Google ID 플랫폼  |  Google Developers

웹 서버 애플리케이션에 OAuth 2.0 사용 이 문서에서는 웹 서버 애플리케이션이 Google API 클라이언트 라이브러리 또는 Google OAuth 2.0 엔드포인트를 사용하여 Google API에 액세스하기 위한 OAuth 2.0 인증

developers.google.com

  • 파라미터 정보 
    • scope: client에서 이전에 정의해둔 데이터의 이용 범위
    • access_type: access token 의 생명주기 결정
      • 가능한 값( online / offline)
      • offline일 경우, access tokenrefresh token 둘 다 넘겨줌
      • refresh token : access token 의 사용기한이 끝났을 경우, 사용자🧑 에게 다시 요청을 보낸다.
    • response_type : 요청하는 데이터 타입
    • redirect_uri : 요청에 대한 응답 code를 받을 📱client의 주소
      내가 사용하고 있는 서버의 주소

⭐ 파라미터 요청 시, URL Encoder를 통해 형식을 변환해준다!

 

  • 기입한 redirect_uri 는 API 관리 페이지에도 동일하게 넣어준다.

 


2. OAuth 서버 응답 처리

 

웹 서버 애플리케이션에 OAuth 2.0 사용  |  Google ID 플랫폼  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 웹 서버 애플리케이션에 OAuth 2.0 사용 이 문서에서는 웹 서버 애플리케이션이 Google API 클라이언트 라이브러리 또는 Google OAuth

developers.google.com

사용자 인증이 정상적으로 완료되면 💾oauth 서버가 code 데이터를 📱client 에게 URL을 통해 넘겨준다.

 

  • code 응답 결과 예시
https://oauth2.example.com/auth?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7

💡 이때 받은 code 는 한번밖에 쓸 수 없다.

 


3. access token 발급 요청하기

📱client 는 URL을 통해 받은 codeclient_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