서비스 계정 워크플로와 마찬가지로 단일 사용자 인증 흐름은 Google Ads UI에서 제공하는 승인 및 사용자 관리 기능을 사용하여 앱에 필요한 모든 계정에 대한 액세스 권한을 부여합니다. 이 인증 워크플로에는 두 단계가 있습니다.
- 앱에서 관리해야 하는 모든 Google Ads 계정에 대한 액세스 권한을 단일 사용자에게 부여합니다.
- 사용자가 앱에서 Google Ads 계정을 대신 관리하도록 승인하여 앱에 모든 Google Ads 계정에 대한 액세스 권한을 부여합니다.
사용자가 한 명뿐이므로 자체 OAuth 2.0 사용자 인증 흐름을 빌드하는 대신 gcloud CLI 또는 GenerateUserCredential 코드 예시와 같은 도구를 사용할 수 있습니다.
이 워크플로의 관련 사용 사례는 소수의 사용자 로그인 (예: 3~4명의 사용자)을 통해 계정에 액세스할 수 있는 경우입니다. 따라서 gcloud CLI와 같은 명령줄 도구를 사용하여 3~4명의 사용자에 대한 승인을 얻는 노력에 비해 본격적인 OAuth 멀티 사용자 인증 워크플로를 빌드하는 개발 노력이 정당화되지 않습니다.
단점
이 흐름에는 서비스 계정 워크플로와 비교할 때 몇 가지 단점이 있습니다.
- 사용자 인증 워크플로를 사용하려면 Google API 콘솔에서 OAuth 2.0 클라이언트 ID와 보안 비밀을 만들어야 합니다. 이 경우 서비스 계정과 키를 만드는 것보다 더 많은 구성 단계가 필요합니다.
- 승인된 사용자가 팀이나 회사를 떠나는 경우 계정에서 사용자를 삭제하거나 사용자 계정을 사용 중지하면 앱이 작동하지 않을 수 있습니다. 서비스 계정은 개별 사용자와 연결되지 않으므로 이러한 위험을 방지할 수 있습니다.
- 멀웨어 또는 피싱으로 인한 계정 도용을 방지하려면 Google Ads 계정을 승인하는 사용자가 OAuth 2.0 갱신 토큰을 생성할 때 패스키로 인증해야 합니다. 서비스 계정은 패스키가 필요하지 않으며 피싱과 같은 사용자 대상 공격에 덜 취약합니다.
사용자 인증 정보 만들기
애플리케이션의 OAuth 동의 화면을 구성하고
https://www.googleapis.com/auth/adwords를 OAuth 2.0 범위로 추가합니다. 자세한 내용은 OAuth 동의 화면 설정을 참조하세요.안내에 따라 클라이언트 ID와 클라이언트 보안 비밀번호를 만듭니다. OAuth 2.0 클라이언트를 만든 후 확인 대화상자에서 JSON 다운로드 버튼을 클릭하여 클라이언트의 JSON 파일을 다운로드합니다. 파일을
credentials.json로 저장합니다.앱을 사용하여 관리하려는 모든 Google Ads 계정에 액세스할 수 있는 사용자 계정을 식별합니다. 액세스 권한이 없는 계정이 있는 경우 해당 사용자에게 계정 액세스 권한을 부여합니다. 이 사용자 계정에 패스키가 설정되어 있는지 확인합니다(새로 생성된 패스키가 신뢰할 수 있는 상태가 되기까지 7일 동안 보안 지연이 적용될 수 있음).
gcloud CLI를 다운로드하고 설치합니다. 설치되면 명령줄 프롬프트에서
gcloud version명령어를 실행하여 도구가 올바르게 작동하는지 확인합니다. 결과는 다음과 유사합니다.gcloud versionGoogle Cloud SDK 492.0.0 alpha 2024.09.06 beta 2024.09.06 bq 2.1.8 bundled-python3-unix 3.11.9 core 2024.09.06 enterprise-certificate-proxy 0.3.2 gcloud-crc32c 1.0.0이전 단계의
credentials.json파일로 gcloud CLI 도구를 실행하여 OAuth 2.0 갱신 토큰을 생성합니다. 갱신 토큰이 gcloud CLI의 기본 프로젝트가 아닌 Google API 콘솔 프로젝트에서 발급되도록--client-id-file매개변수를 전달해야 합니다.gcloud auth application-default login \ --scopes=https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform \ --client-id-file=PATH_TO_CREDENTIALS_JSONgcloud명령어는 새 브라우저 창에서 Google 계정 로그인 창을 열고 OAuth 2.0 인증 단계를 안내합니다. 이전 단계에서 선택한 사용자로 로그인하고 패스키를 사용하여 본인 인증을 합니다. 앱이 인증되지 않은 경우 경고 화면이 표시될 수 있습니다. 이러한 경우 고급 링크를 클릭하고 PROJECT_NAME (안전하지 않음)로 이동 옵션을 클릭해도 안전합니다.범위를 확인한 후 계속 버튼을 클릭하여 권한을 부여합니다. 브라우저가
https://cloud.google.com/sdk/auth_success로 이동하여 인증이 성공했음을 나타냅니다. 페이지에 다음 메시지가 표시됩니다.Authorization code granted. Close this tab.gcloud명령어는 다음 메시지를 출력합니다.Credentials saved to file: [/****/.config/gcloud/application_default_credentials.json]application_default_credentials.json파일을 엽니다. 콘텐츠는 다음과 비슷합니다.{ "account": "", "client_id": "******.apps.googleusercontent.com", "client_secret": "******", "refresh_token": "******", "type": "authorized_user", "universe_domain": "googleapis.com" }
클라이언트 라이브러리 구성
클라이언트 라이브러리를 구성하는 방법에 대한 안내를 보려면 프로그래밍 언어에 해당하는 탭을 선택합니다. 승인된 사용자가 Google Ads 관리자 계정을 통해 고객 계정에 액세스하는 경우 login-customer-id (또는 loginCustomerId)를 하이픈 없이 해당 관리자 계정의 10자리 고객 ID로 설정합니다.
자바
ads.properties 파일에서 다음 키를 구성합니다.
api.googleads.clientId=INSERT_OAUTH2_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
추가 옵션은 구성 가이드를 참고하세요.
.NET
GoogleAdsConfig 인스턴스에서 OAuth 2.0 사용자 인증 정보를 설정하고 이를 사용하여 GoogleAdsClient 객체를 초기화합니다.
GoogleAdsConfig config = new GoogleAdsConfig()
{
OAuth2Mode = OAuth2Flow.APPLICATION,
OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID_HERE",
OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE",
OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE",
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE",
};
GoogleAdsClient client = new GoogleAdsClient(config);
추가 옵션은 구성 가이드를 참고하세요.
Python
google-ads.yaml 파일에서 다음 키를 구성합니다.
client_id: INSERT_OAUTH2_CLIENT_ID_HERE
client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
refresh_token: INSERT_OAUTH2_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
use_proto_plus: True
추가 옵션은 구성 가이드를 참고하세요.
PHP
google_ads_php.ini 파일에서 다음 키를 구성합니다.
[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
[OAUTH2]
clientId = "INSERT_OAUTH2_CLIENT_ID_HERE"
clientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE"
refreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE"
추가 옵션은 구성 가이드를 참고하세요.
Ruby
google_ads_config.rb 파일에서 다음 키를 구성합니다.
Google::Ads::GoogleAds::Config.new do |c|
c.client_id = 'INSERT_OAUTH2_CLIENT_ID_HERE'
c.client_secret = 'INSERT_OAUTH2_CLIENT_SECRET_HERE'
c.refresh_token = 'INSERT_OAUTH2_REFRESH_TOKEN_HERE'
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
추가 옵션은 구성 가이드를 참고하세요.
Perl
googleads.properties 파일에서 다음 키를 구성합니다.
clientId=INSERT_OAUTH2_CLIENT_ID_HERE
clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
추가 옵션은 구성 가이드를 참고하세요.
curl
HTTP 클라이언트를 사용하여 OAuth 2.0 액세스 토큰을 가져오는 것으로 시작합니다. 이 가이드에서는 curl 명령어를 사용합니다.
curl \
--data "grant_type=refresh_token" \
--data "client_id=CLIENT_ID" \
--data "client_secret=CLIENT_SECRET" \
--data "refresh_token=REFRESH_TOKEN" \
https://oauth2.googleapis.com/tokenAPI 호출에서 액세스 토큰을 사용할 수 있습니다. 다음 예에서는 GoogleAdsService.SearchStream 메서드를 사용하여 계정의 캠페인을 가져오는 캠페인 보고서를 실행하는 방법을 보여줍니다. 이 가이드에서는 보고에 대해 자세히 다루지 않습니다.
curl -i -X POST \
https://googleads.googleapis.com/v26/customers/CUSTOMER_ID/googleAds:searchStream \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "login-customer-id: LOGIN_CUSTOMER_ID" \
--data-binary "@query.json"query.json의 내용은 다음과 같습니다.
{
"query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}