Tương tự như quy trình tài khoản dịch vụ, quy trình xác thực người dùng duy nhất sử dụng các tính năng uỷ quyền và quản lý người dùng do giao diện người dùng Google Ads cung cấp để cấp cho ứng dụng quyền truy cập vào tất cả các tài khoản cần thiết. Quy trình xác thực này có 2 bước:
- Bạn cấp cho một người dùng quyền truy cập vào tất cả tài khoản Google Ads mà ứng dụng cần quản lý.
- Người dùng cho phép ứng dụng quản lý tài khoản Google Ads thay mặt họ, nhờ đó cấp cho ứng dụng quyền truy cập vào tất cả tài khoản Google Ads.
Vì chỉ có một người dùng tham gia, nên bạn có thể dựa vào các công cụ như [giao diện dòng lệnh gcloud][gcloud-cli] hoặc [ví dụ về mã GenerateUserCredential][generate-user-credentials-example] thay vì tự xây dựng quy trình xác thực người dùng OAuth 2.0.
Một trường hợp sử dụng liên quan cho quy trình này là khi bạn có thể truy cập vào tài khoản của mình thông qua một số ít thông tin đăng nhập của người dùng (ví dụ: 3 đến 4 người dùng). Vì vậy, nỗ lực phát triển để xây dựng một quy trình xác thực người dùng OAuth hoàn chỉnh là không chính đáng khi so sánh với nỗ lực để lấy quyền uỷ quyền cho 3 đến 4 người dùng bằng một công cụ dòng lệnh như giao diện dòng lệnh gcloud.
Điểm hạn chế
Quy trình này có một số điểm bất lợi so với quy trình tài khoản dịch vụ:
- Quy trình xác thực người dùng yêu cầu bạn tạo mã ứng dụng khách và khoá bí mật OAuth 2.0 trong Google Cloud Console. Điều này đòi hỏi nhiều bước định cấu hình hơn so với việc tạo tài khoản dịch vụ và khoá.
- Ứng dụng của bạn có thể phải trải qua [quy trình xác minh ứng dụng trên Google Cloud][app-verification] bổ sung.
- Nếu người dùng được uỷ quyền rời khỏi nhóm hoặc công ty, thì ứng dụng của bạn có thể ngừng hoạt động nếu bạn xoá người dùng đó khỏi tài khoản hoặc tắt tài khoản người dùng. Tài khoản dịch vụ không liên kết với người dùng cá nhân, vì vậy, bạn có thể tránh được rủi ro này.
- Người dùng uỷ quyền cho tài khoản Google Ads nên thực hiện các biện pháp phòng ngừa bổ sung như [bật tính năng xác thực 2 yếu tố][2fa] để ngăn chặn việc Tài khoản Google của họ bị xâm phạm do bảo mật kém, phần mềm độc hại hoặc lừa đảo. Tài khoản dịch vụ ít bị ảnh hưởng bởi vấn đề này hơn vì một số phương thức tấn công này không áp dụng trực tiếp cho tài khoản dịch vụ.
Tạo thông tin xác thực
Làm theo [hướng dẫn][configure-oauth-consent] để định cấu hình màn hình xin phép bằng OAuth cho ứng dụng của bạn và thêm
https://www.googleapis.com/auth/adwordslàm phạm vi OAuth 2.0. Xem phần Thiết lập màn hình xin phép bằng OAuth để biết thông tin chi tiết.Tạo mã ứng dụng khách và khoá bí mật của ứng dụng khách bằng cách làm theo [hướng dẫn][create-credentials]. Sau khi tạo ứng dụng khách OAuth 2.0, hãy tải tệp JSON của ứng dụng khách xuống bằng cách nhấp vào biểu tượng Tải ứng dụng khách OAuth xuống, sau đó nhấp vào nút TẢI JSON XUỐNG trên màn hình sau. Lưu tệp dưới dạng
credentials.json.Xác định một tài khoản người dùng có quyền truy cập vào tất cả tài khoản Google Ads mà bạn muốn quản lý bằng ứng dụng của mình. Nếu có tài khoản bị thiếu quyền truy cập, hãy làm theo [hướng dẫn][grant-access] để cấp quyền truy cập cần thiết.
[Tải xuống và cài đặt][install-gcloud] giao diện dòng lệnh gcloud. Sau khi cài đặt, hãy xác minh rằng công cụ này hoạt động đúng cách bằng cách chạy lệnh
gcloud versiontừ dấu nhắc dòng lệnh. Kết quả có thể như sau.:~$ gcloud version Google 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 gsutil 5.30Tạo mã làm mới OAuth 2.0 bằng cách chạy công cụ giao diện dòng lệnh gcloud:
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.json>Tệp
credentials.jsonlà từ bước trước.Lệnh
gcloudsẽ mở cửa sổ đăng nhập Tài khoản Google trong một cửa sổ trình duyệt mới và hướng dẫn bạn các bước xác thực OAuth 2.0. Hãy nhớ đăng nhập bằng người dùng mà bạn đã chọn ở các bước trước. Nếu ứng dụng của bạn chưa được xác minh, bạn có thể thấy màn hình cảnh báo. Trong trường hợp đó, bạn có thể nhấp vào đường liên kết Hiển thị nâng cao rồi nhấp vào tuỳ chọn Chuyển đến PROJECT_NAME (chưa được xác minh).
Sau khi xác minh các phạm vi, hãy nhấp vào nút Tiếp tục để cấp quyền. Trình duyệt sẽ chuyển đến
https://cloud.google.com/sdk/auth_success, cho biết rằng quá trình xác thực đã thành công. Trang này sẽ hiển thị thông báo sau:Authorization code granted. Close this tab.Lệnh
gcloudsẽ in thông báo sau:Credentials saved to file: [/****/.config/gcloud/application_default_credentials.json]Bây giờ, hãy mở tệp
application_default_credentials.json. Nội dung của tệp này sẽ tương tự như sau:{ "account": "", "client_id": "******.apps.googleusercontent.com", "client_secret": "******", "refresh_token": "******", "type": "authorized_user", "universe_domain": "googleapis.com" }
Định cấu hình thư viện ứng dụng
Chọn thẻ tương ứng với ngôn ngữ lập trình của bạn để biết hướng dẫn về cách định cấu hình thư viện ứng dụng.
Java
Định cấu hình các khoá sau trong tệp ads.properties.
api.googleads.clientId=INSERT_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_REFRESH_TOKEN_HERE
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
Xem [hướng dẫn định cấu hình][java-config-guide] để biết thêm các tuỳ chọn.
.NET
Bạn có thể khởi chạy thực thể GoogleAdsClient trong thời gian chạy bằng thông tin xác thực mà bạn đã nhận được từ người dùng có tài khoản mà bạn đang thực hiện lệnh gọi API.
GoogleAdsConfig config = new GoogleAdsConfig()
{
OAuth2Mode = OAuth2Flow.APPLICATION,
OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID",
OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET",
OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN",
...
};
GoogleAdsClient client = new GoogleAdsClient(config);
Xem [hướng dẫn định cấu hình][dotnet-config-guide] để biết thêm các tuỳ chọn.
Python
Định cấu hình các khoá sau trong tệp google-ads.yaml.
client_id: INSERT_OAUTH2_CLIENT_ID_HERE
client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
refresh_token: INSERT_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
Xem [hướng dẫn định cấu hình][python-config-guide] để biết thêm các tuỳ chọn.
PHP
Định cấu hình các khoá sau trong 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"
Xem [hướng dẫn định cấu hình][php-config-guide] để biết thêm các tuỳ chọn.
Ruby
Định cấu hình các khoá sau trong tệp [google_ads_config.rb][ruby-config-file].
Google::Ads::GoogleAds::Config.new do |c| c.client_id = 'INSERT_CLIENT_ID_HERE' c.client_secret = 'INSERT_CLIENT_SECRET_HERE' c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE' c.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE' c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE' end
Xem [hướng dẫn định cấu hình][ruby-config-guide] để biết thêm các tuỳ chọn.
Perl
Định cấu hình các khoá sau trong tệp 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
Xem [hướng dẫn định cấu hình][perl-config-guide] để biết thêm các tuỳ chọn.
curl
Bắt đầu bằng cách sử dụng ứng dụng HTTP để tìm nạp mã truy cập OAuth 2.0. Hướng dẫn này sử dụng lệnh curl.
curl \
--data "grant_type=refresh_token" \
--data "client_id=CLIENT_ID" \
--data "client_secret=CLIENT_SECRET" \
--data "refresh_token=REFRESH_TOKEN" \
https://www.googleapis.com/oauth2/v3/tokenGiờ đây, bạn có thể sử dụng mã truy cập trong các lệnh gọi API. Ví dụ sau đây
cho biết cách chạy báo cáo chiến dịch bằng phương thức
GoogleAdsService.SearchStream để truy xuất các
chiến dịch trong tài khoản của bạn. Hướng dẫn này không đề cập đến thông tin chi tiết về
báo cáo.
curl -i -X POST https://googleads.googleapis.com/v24/customers/CUSTOMER_ID/googleAds:searchStream \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "developer-token: DEVELOPER_TOKEN" \
-H "login-customer-id: LOGIN_CUSTOMER_ID" \
--data-binary "@query.json"Nội dung của query.json như sau:
{
"query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}
[service-account-workflow]: /google-ads/api/docs/oauth/service-accounts [gcloud-cli]: https://cloud.google.com/sdk/gcloud [generate-user-credentials-example]: /google-ads/api/samples/generate-user-credentials [app-verification]: //support.google.com/cloud/answer/13461325 [2fa]: //support.google.com/google-ads/answer/12864186 [configure-oauth-consent]: /workspace/guides/configure-oauth-consent [create-credentials]: /workspace/guides/create-credentials#desktop-app [grant-access]: //support.google.com/google-ads/answer/6372672 [install-gcloud]: //cloud.google.com/sdk/docs/install [java-config-guide]: /google-ads/api/docs/client-libs/java/config-file [dotnet-config-guide]: /google-ads/api/docs/client-libs/dotnet/configuration [python-config-guide]: /google-ads/api/docs/client-libs/python/configuration [php-config-guide]: /google-ads/api/docs/client-libs/php/configuration [ruby-config-file]: //github.com/googleads/google-ads-ruby/blob/HEAD/google_ads_config.rb [ruby-config-guide]: /google-ads/api/docs/client-libs/ruby/configuration [perl-config-guide]: /google-ads/api/docs/client-libs/perl/configuration [oauth-playground]: /oauthplayground/ [playground-video]: //www.youtube.com/watch?v=KFICa7Ngzng