이전 포스팅 다음 순서로 생각하면 된다.
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
https://developers.google.com/identity/protocols/oauth2/native-app?hl=ko#exchange-authorization-code
'환경설정' 카테고리의 다른 글
Monday API - 쿼리 호출 (기본) (0) | 2023.03.27 |
---|---|
Monday API - 사용 셋팅 (0) | 2023.03.26 |
Google API - Google Service Account 를 사용(Analytics API) (0) | 2023.03.17 |
Google API - POSTMAN 내 OAuth 2.0 인증 (0) | 2023.03.14 |
Tistory 목차 셋팅- TOC(Table Of Contents) (0) | 2023.03.13 |