เวิร์กโฟลว์การตรวจสอบสิทธิ์ผู้ใช้รายเดียว

เวิร์กโฟลว์การตรวจสอบสิทธิ์ผู้ใช้รายเดียวใช้ประโยชน์จากฟีเจอร์การให้สิทธิ์และการจัดการผู้ใช้ที่ UI ของ Google Ads มีให้เพื่อมอบสิทธิ์เข้าถึงบัญชีที่จำเป็นทั้งหมดให้กับแอป ซึ่งคล้ายกับ[เวิร์กโฟลว์บัญชีบริการ][service-account-workflow] เวิร์กโฟลว์การตรวจสอบสิทธิ์นี้มี 2 ขั้นตอน ดังนี้

  • คุณให้สิทธิ์ผู้ใช้รายเดียวเข้าถึงบัญชี Google Ads ทั้งหมด ที่แอปควรจัดการ
  • ผู้ใช้ให้สิทธิ์แอปของคุณในการจัดการบัญชี Google Ads ในนามของผู้ใช้ ซึ่งจะทำให้แอปมีสิทธิ์เข้าถึงบัญชี Google Ads ทั้งหมด

เนื่องจากมีผู้ใช้เพียงรายเดียว คุณจึงใช้เครื่องมือต่างๆ เช่น [gcloud CLI][gcloud-cli] หรือ[ตัวอย่างโค้ด GenerateUserCredential][generate-user-credentials-example] แทนการสร้างเวิร์กโฟลว์การตรวจสอบสิทธิ์ผู้ใช้ OAuth 2.0 ของคุณเองได้

กรณีการใช้งานที่เกี่ยวข้องสำหรับเวิร์กโฟลว์นี้คือเมื่อคุณเข้าถึงบัญชีผ่านการเข้าสู่ระบบของผู้ใช้เพียงไม่กี่ราย (เช่น 3-4 ราย) ดังนั้นความพยายามในการพัฒนาเวิร์กโฟลว์การตรวจสอบสิทธิ์ผู้ใช้ OAuth แบบเต็มจึงไม่คุ้มค่าเมื่อเทียบกับความพยายามในการขอสิทธิ์สำหรับผู้ใช้ 3-4 รายโดยใช้เครื่องมือบรรทัดคำสั่ง เช่น gcloud CLI

ข้อเสีย

เวิร์กโฟลว์นี้มีข้อเสียบางประการเมื่อเทียบกับเวิร์กโฟลว์บัญชีบริการ ดังนี้

  1. เวิร์กโฟลว์การตรวจสอบสิทธิ์ผู้ใช้กำหนดให้คุณต้องสร้างรหัสไคลเอ็นต์และข้อมูลลับของไคลเอ็นต์ OAuth 2.0 ในคอนโซล Google Cloud ซึ่งต้องใช้ขั้นตอนการกำหนดค่ามากกว่าการสร้างบัญชีบริการและคีย์
  2. แอปของคุณอาจต้องผ่าน[กระบวนการยืนยันแอป Google Cloud][app-verification]เพิ่มเติม
  3. หากผู้ใช้ที่ได้รับอนุญาตออกจากทีมหรือบริษัท แอปของคุณอาจหยุดทำงานหากคุณนำผู้ใช้ออกจากบัญชีหรือปิดใช้บัญชีผู้ใช้ บัญชีบริการไม่ได้เชื่อมโยงกับผู้ใช้แต่ละราย จึงหลีกเลี่ยงความเสี่ยงนี้ได้
  4. ผู้ใช้ที่ให้สิทธิ์บัญชี Google Ads ควรใช้ความระมัดระวังเป็นพิเศษ เช่น [เปิดใช้การยืนยันตัวตนแบบ 2 ปัจจัย][2fa] เพื่อป้องกันไม่ให้บัญชี Google ถูกบุกรุกเนื่องจากความปลอดภัยไม่ดี มัลแวร์ หรือฟิชชิง บัญชีบริการมีความเสี่ยงต่อปัญหานี้น้อยกว่าเนื่องจากวิธีการโจมตีบางอย่างใช้ไม่ได้กับบัญชีบริการโดยตรง

สร้างข้อมูลเข้าสู่ระบบ

  1. ทำตาม[วิธีการ][configure-oauth-consent] เพื่อกำหนดค่าหน้าจอขอคำยินยอม OAuth สำหรับแอปพลิเคชันและเพิ่ม https://www.googleapis.com/auth/adwords เป็นขอบเขต OAuth 2.0 ดูรายละเอียดได้ที่หัวข้อ การตั้งค่าหน้าจอขอความยินยอม OAuth

  2. สร้างรหัสไคลเอ็นต์และข้อมูลลับของไคลเอ็นต์โดยทำตาม[วิธีการ][create-credentials] เมื่อสร้างไคลเอ็นต์ OAuth 2.0 แล้ว ให้ดาวน์โหลดไฟล์ JSON ของไคลเอ็นต์โดยคลิกไอคอนดาวน์โหลดไคลเอ็นต์ OAuth ก่อน แล้วจึงคลิกปุ่มดาวน์โหลด JSON ในหน้าจอถัดไป บันทึกไฟล์เป็น credentials.json

  3. ระบุบัญชีผู้ใช้ที่มีสิทธิ์เข้าถึงบัญชี Google Ads ทั้งหมดที่คุณต้องการจัดการโดยใช้แอป หากมีบัญชีที่ไม่มีสิทธิ์เข้าถึง ให้ทำตาม[วิธีการ][grant-access] เพื่อให้สิทธิ์เข้าถึงที่จำเป็น

  4. [ดาวน์โหลดและติดตั้ง][install-gcloud] gcloud CLI เมื่อติดตั้งแล้ว ให้ตรวจสอบว่าเครื่องมือทำงานอย่างถูกต้องโดยเรียกใช้คำสั่ง gcloud version จากพรอมต์บรรทัดคำสั่ง เอาต์พุตอาจมีลักษณะดังนี้

    :~$ 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.30
  5. สร้างโทเค็นการรีเฟรช OAuth 2.0 โดยเรียกใช้เครื่องมือ gcloud CLI ดังนี้

    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>

    ไฟล์ credentials.json มาจากขั้นตอนก่อนหน้า

  6. คำสั่ง gcloud จะเปิดหน้าต่างเข้าสู่ระบบบัญชี Google ในหน้าต่างเบราว์เซอร์ใหม่และนำคุณผ่านขั้นตอนการตรวจสอบสิทธิ์ OAuth 2.0 ตรวจสอบว่าคุณลงชื่อเข้าใช้ในฐานะผู้ใช้ที่เลือกจากขั้นตอนก่อนหน้า หากแอปของคุณ ไม่ได้รับการยืนยัน คุณอาจเห็นหน้าจอ คำเตือน ในกรณีดังกล่าว คุณสามารถคลิกแสดงขั้นสูง ลิงก์ แล้วคลิกไปที่ PROJECT_NAME (ไม่ได้รับการยืนยัน) ตัวเลือกได้อย่างปลอดภัย

  7. หลังจากตรวจสอบขอบเขตแล้ว ให้คลิกปุ่มดำเนินการต่อ เพื่อให้สิทธิ์ เบราว์เซอร์จะไปยัง 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"
    }
    

การกำหนดค่าไลบรารีของไคลเอ็นต์

เลือกแท็บที่ตรงกับภาษาโปรแกรมเพื่อดูวิธีการกำหนดค่าไลบรารีของไคลเอ็นต์

Java

กำหนดค่าคีย์ต่อไปนี้ในไฟล์ 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

ดูตัวเลือกเพิ่มเติมได้ที่[คู่มือการกำหนดค่า][java-config-guide]

.NET

คุณสามารถเริ่มต้นใช้งานอินสแตนซ์ GoogleAdsClient ได้ในขณะรันไทม์ โดยใช้ข้อมูลเข้าสู่ระบบที่คุณได้รับจากผู้ใช้ที่คุณกำลังเรียกใช้ 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);

ดูตัวเลือกเพิ่มเติมได้ที่[คู่มือการกำหนดค่า][dotnet-config-guide]

Python

กำหนดค่าคีย์ต่อไปนี้ในไฟล์ 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

ดูตัวเลือกเพิ่มเติมได้ที่[คู่มือการกำหนดค่า][python-config-guide]

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"

ดูตัวเลือกเพิ่มเติมได้ที่[คู่มือการกำหนดค่า][php-config-guide]

Ruby

กำหนดค่าคีย์ต่อไปนี้ในไฟล์ [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

ดูตัวเลือกเพิ่มเติมได้ที่[คู่มือการกำหนดค่า][ruby-config-guide]

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
 

ดูตัวเลือกเพิ่มเติมได้ที่[คู่มือการกำหนดค่า][perl-config-guide]

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://www.googleapis.com/oauth2/v3/token

ตอนนี้คุณสามารถใช้โทเค็นเพื่อการเข้าถึงในการเรียกใช้ API ได้แล้ว ตัวอย่างต่อไปนี้ แสดงวิธีเรียกใช้รายงานแคมเปญโดยใช้ GoogleAdsService.SearchStream เพื่อดึงข้อมูล แคมเปญในบัญชี คู่มือนี้ไม่ได้กล่าวถึงรายละเอียดของ การรายงาน

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"

เนื้อหาของ query.json มีดังนี้

{
  "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