본문 바로가기

환경설정

Google API - OAuth 2.0 인증

이전 포스팅 다음 순서로 생각하면 된다. 

2023.03.14 - [환경설정] - Google API - POSTMAN 내 OAuth 2.0 인증

 

서비스어카운트를 바로 이용 하는 것 보다 토큰을 통한 api 호출이 나았기에 해당 방법으로 진행한다. 

 

 서비스 어카운트부터 다시 맞춰야 한다. 

이전 포스팅에서 말했다 싶이 redirect_url 은 API ConsoleCredentials page 에서 셋팅한 리디렉션 URL 중 하나와 일치해야 하기에 서비스어카운트의 리다이렉트 url을 맞춰 줘야 한다. 

 

1. 서비스어카운트 에 redirect url 생성 

생성 시 아래 url 을 보고 따라하면 된다. 

https://developers.google.com/identity/protocols/oauth2/service-account?hl=ko#creatinganaccount

여러개 생성 가능하며 무조건 redirect url 중 하나가 token request 후 callback url 과 일치 되어야 한다

 

 

2. 엔드 포인트를 맞춰준다 

이전 포스팅에서 말했다 싶이 구글 OAuth 2.0의 endpoint 는 ' https://accounts.google.com/o/oauth2/v2/auth ' 이다. 

필수 파라미터  client_id, redirect_uri response_type, scope 를 사용하여 상세한 http 호출 url을 생성한다.

https://developers.google.com/identity/protocols/oauth2/web-server?hl=ko#creatingclient

 

https://accounts.google.com/o/oauth2/auth?client_id=[클라이언트ID]
&redirect_uri=https://localhost:8080/auth/google/callback&response_type=code&
scope=https://www.googleapis.com/auth/analytics

상단의 URL로 접속하면 아래와 같이 로그인 창이 나오게 된다. 

사용자에게 인증 동의를 받는다

 

3. 로그인 후 리디렉션된 페이지에서 코드 값 가져온다. 

정상적으로 로그인이 완료 되었다면,  상단 url 에서 authorization code 값을 가져올 수 있다. 

 

https://localhost:8080/auth/google/callback?code=[authorization code값]
&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics

 

내가 선택한 scope 에 대한 인증 코드값을 받은 내역으로 해당 authorization code값으로 access token을 만들어야 한다. 

이때 코드값은 url encoding 되어 있기에 decoding 하여 사용해야 한다 

(라고 하여도 코드 내 '%2F' 가 '/' 로 변경되는 정도이다)

 

4. http request 로 https://oauth2.googleapis.com/token 호출 https://developers.google.com/identity/protocols/oauth2/native-app?hl=ko#exchange-authorization-code

승인코드 액서스 토큰으로 변환을 위해 아래와 같이 호출 한다. 

 

import requests

url = "https://oauth2.googleapis.com/token"

payload={'code': [authorization code],
'client_id': [클라이언트ID],
'client_secret': [클라이언트시크릿],
'redirect_uri': 'https://localhost:8080/',
'grant_type': 'authorization_code'}
headers = {}
response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

 

 

결과 : 

{
  "access_token": [토큰값],
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/analytics",
  "token_type": "Bearer"
}

 

또한, VBA로 해당 내역 호출한 코드

Dim client As RestSharp.RestClient = New RestSharp.RestClient("https://oauth2.googleapis.com/token")
client.Timeout = -1

Dim request As RestSharp.RestRequest = New RestSharp.RestRequest(RestSharp.Method.POST)
request.AlwaysMultipartFormData = True
request.AddParameter("code", [코드값])
request.AddParameter("client_id", [클라이언트ID])
request.AddParameter("client_secret", [클라이언트시크릿])
request.AddParameter("redirect_uri", [리다이렉트 URL])
request.AddParameter("grant_type", "authorization_code")

Dim response As IRestResponse = client.Execute(request)
out_Result = response.Content

 

 

5. 해당 토큰값으로 Google API 호출 

해당 토큰값을 넣어 호출하면 아래와 같이 JSON 으로 된 결과 를 가져올 수 있다. 

 

import requests

url = "https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3A[IDS]&
       dimensions=ga%3Acampaign%2Cga%3Asource%2Cga%3Amedium%2Cga%3AadContent%2Cga%3Adate
       &metrics=ga%3Ausers&sort=-ga%3Adate&filters=ga%3Amedium%3D%3Ddisplay
       &segment=gaid%3A%3A-1&start-date=2023-03-09&end-date=2023-03-09&start-index=1
       &max-results=10"

headers = {
  'Authorization': 'Bearer [토큰값]'
}

response = requests.request("GET", url, headers=headers)

print(response.text)

이제 마음껏 사용만 하면 된다. 

 

원하는 결과가 나오는걸 확인 가능하다.

 

 

 

참고사이트 :

너무나도 큰 도움이 되었던 사이트 

https://velog.io/@young224/Google-OAuth-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84

 

Google OAuth 기능 구현(postman요청)

프로젝트 google oauth기능 구현과 postman을 통한 확인

velog.io

https://developers.google.com/identity/protocols/oauth2/native-app?hl=ko#exchange-authorization-code 

 

모바일 및 데스크톱 앱용 OAuth 2.0  |  Authorization  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 모바일 및 데스크톱 앱용 OAuth 2.0 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하

developers.google.com