Mengapa harus mengotomatiskan verifikasi domain?
Meskipun Cloud Channel API memungkinkan Anda menyediakan hak Google Workspace dalam skala besar, pelanggan tetap harus melakukan tindakan berikut untuk mengaktifkan layanan.
- Menyetujui Persyaratan Layanan
- Memverifikasi kepemilikan domain
- Menyiapkan data MX
Pelanggan yang baru dibuat akan mengikuti proses persyaratan terpandu saat mereka mengakses konsol admin (di admin.google.com) untuk pertama kalinya.
Jika Anda memiliki akses terprogram ke data DNS domain (misalnya, jika Anda menjual kembali domain ke pelanggan), Anda dapat mengotomatiskan langkah 2 dan 3 untuk meningkatkan rasio aktivasi karena langkah-langkah tersebut biasanya memerlukan pengetahuan teknis dari pelanggan yang membeli kembali.
Codelab ini menjelaskan cara menggunakan Site Verification API untuk menerapkan otomatisasi ini.
Sebelum memulai
Pastikan Anda menyelesaikan codelab penyiapan API untuk menyiapkan Google Cloud project dan membuat akun layanan untuk memanggil Cloud Channel API.
Baca tentang operasi Layanan Channel.
Sebaiknya gunakan Konsol Penjualan Partner Uji untuk codelab ini.
Codelab ini juga mengharapkan Anda telah menyelesaikan codelab penyediaan end-to-end Workspace.
Ringkasan
Memverifikasi domain untuk hak Google Workspace melibatkan beberapa panggilan API.

Site Verification API tidak khusus untuk reseller. Verifikasi domain adalah sinyal yang digunakan di berbagai produk Google (Search Console, Google Ads, dll.). Proses yang dijelaskan di sini bergantung pada penetapan admin super domain reseller Anda sebagai "pemilik" domain dan penetapan admin pertama pelanggan Anda sebagai pemilik bersama. Anda dapat mempelajari lebih lanjut konsep tersebut di halaman Memulai Site Verification API.
Langkah 1: Bersiap untuk Site Verification API
- Buka bagian Library API di Google Cloud konsol dan aktifkan Site Verification API.
- Buka halaman
Delegasi di seluruh domain
menggunakan akun admin super domain reseller Anda.
- Di baris dengan akun layanan Anda, klik Edit.
- Masukkan
https://www.googleapis.com/auth/siteverificationdi kolom Cakupan OAuth. - Klik Otorisasi.
- Instal library klien Site Verification API.
Langkah 2: Mendapatkan token verifikasi
Codelab ini akan berfokus pada cara paling umum untuk memverifikasi domain: menggunakan data DNS TXT. Site Verification API mendukung
metode verifikasi lainnya.
Untuk mengambil token yang akan Anda tempatkan sebagai data TXT, Anda harus
mendapatkan token untuk type=INET_DOMAIN dan verificationMethod=DNS_TXT.
Dalam kode berikut, isi variabel ini menggunakan informasi Anda.
jsonKeyFile: Jalur ke file kunci JSON yang dibuat saat Anda membuat akun layanan.resellerAdminUser: Alamat email admin super domain reseller.customerDomain: Domain pelanggan akhir. Jika Anda menjalankan codelab ini di Konsol Penjualan Partner Uji, pastikan domain mengikuti konvensi penamaan domain.
C#
Menggunakan impor berikut:
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.SiteVerification.v1;
using Google.Apis.SiteVerification.v1.Data;
Buat klien API dan ambil token:
// Set up credentials with user impersonation
ICredential credential = GoogleCredential.FromFile(jsonKeyFile)
.CreateScoped("https://www.googleapis.com/auth/siteverification")
.CreateWithUser(resellerAdminUser);
// Create the API service
var verificationService = new SiteVerificationService(new BaseClientService.Initializer{
HttpClientInitializer = credential,
});
// Fetch the token
var request = new SiteVerificationWebResourceGettokenRequest {
VerificationMethod = "DNS_TXT",
Site = new SiteVerificationWebResourceGettokenRequest.SiteData {
Type = "INET_DOMAIN",
Identifier = customerDomain
}
};
var response = verificationService.WebResource.GetToken(request).Execute();
string token = response.Token;
Console.WriteLine("Site Verification token: " + token);
Go
Menggunakan impor berikut:
import (
"context"
"fmt"
"os"
"golang.org/x/oauth2/google"
"google.golang.org/api/option"
"google.golang.org/api/siteverification/v1"
)
Buat klien API dan ambil token:
ctx := context.Background()
// Set up credentials with user impersonation
jsonKey, _ := os.ReadFile(jsonKeyFile)
jwt, _ := google.JWTConfigFromJSON(jsonKey, "https://www.googleapis.com/auth/siteverification")
jwt.Subject = resellerAdminUser
tokenSource := jwt.TokenSource(ctx)
// Create the API Service
verificationService, _ := siteverification.NewService(ctx, option.WithTokenSource(tokenSource))
// Fetch the token
req := &siteverification.SiteVerificationWebResourceGettokenRequest{
Site: &siteverification.SiteVerificationWebResourceGettokenRequestSite{
Type: "INET_DOMAIN",
Identifier: customerDomain,
},
VerificationMethod: "DNS_TXT",
}
res, _ := verificationService.WebResource.GetToken(req).Do()
token := res.Token
fmt.Println("Site verification token: " + token)
Java
Menggunakan impor berikut:
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ServiceAccountCredentials;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.siteVerification.SiteVerification;
import com.google.api.services.siteVerification.SiteVerificationScopes;
import com.google.api.services.siteVerification.model.SiteVerificationWebResourceGettokenRequest;
import com.google.api.services.siteVerification.model.SiteVerificationWebResourceGettokenResponse;
import com.google.api.services.siteVerification.model.SiteVerificationWebResourceResource;
import java.io.FileInputStream;
import java.util.Arrays;
Buat klien API dan ambil token:
// Set up credentials with user impersonation
FileInputStream jsonKeyFileSteam = new FileInputStream(JSON_KEY_FILE);
GoogleCredentials credentials = ServiceAccountCredentials.fromStream(jsonKeyFileSteam)
.createScoped("https://www.googleapis.com/auth/siteverification")
.createDelegated(RESELLER_ADMIN_USER);
// Create the API service
SiteVerification verificationService = new SiteVerification.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(),
new HttpCredentialsAdapter(credentials)).build();
// Fetch the token
SiteVerificationWebResourceGettokenRequest request =
new SiteVerificationWebResourceGettokenRequest()
.setVerificationMethod("DNS_TXT")
.setSite(new SiteVerificationWebResourceGettokenRequest.Site()
.setType("INET_DOMAIN")
.setIdentifier(CUSTOMER_DOMAIN));
SiteVerificationWebResourceGettokenResponse response =
verificationService.webResource().getToken(request).execute();
String token = response.getToken();
System.out.println("Site Verification token: " + token);
Node.js
Menggunakan impor berikut:
const {google} = require('googleapis');
Buat klien API dan ambil token:
// Set up credentials with user impersonation
const authJWT = new JWT({
keyFile: jsonKeyFile,
scopes: ['https://www.googleapis.com/auth/siteverification'],
subject: resellerAdminUser,
});
// Create the API service
const verificationService = google.siteVerification({version: 'v1', auth: authJWT});
// Fetch the token
const { data } = await verificationService.webResource.getToken({
requestBody: {
site: {
type: 'INET_DOMAIN',
identifier: customerDomain,
},
verificationMethod: 'DNS_TXT',
}
});
const token = data.token;
console.log(`Site Verification token: ${token}`);
PHP
Buat klien API dan ambil token:
// Set up credentials with user impersonation
$client = new Google_Client();
$client->setAuthConfig($JSON_KEY_FILE);
$client->setSubject($RESELLER_ADMIN_USER);
$client->setScopes('https://www.googleapis.com/auth/siteverification');
// Create the API service
$verificationService = new Google_Service_SiteVerification($client);
// Fetch the token
$request = new Google_Service_SiteVerification_SiteVerificationWebResourceGettokenRequest([
'verificationMethod' => 'DNS_TXT',
'site' => [
'type' => 'INET_DOMAIN',
'identifier' => $CUSTOMER_DOMAIN
]
]);
$response = $verificationService->webResource->getToken($request);
$token = $response->token;
print 'Site Verification token: ' . $token . PHP_EOL;
Python
Menggunakan impor berikut:
from google.oauth2 import service_account
from apiclient.discovery import build
Buat klien API dan ambil token:
# Set up credentials with user impersonation
credentials = service_account.Credentials.from_service_account_file(
JSON_KEY_FILE, scopes=["https://www.googleapis.com/auth/siteverification"])
credentials_delegated = credentials.with_subject(RESELLER_ADMIN_USER)
# Create the API service
verification_service = build(serviceName="siteVerification", version="v1",
credentials=credentials_delegated)
# Fetch the token
response = verification_service.webResource().getToken(
body={
"site": {
"type": "INET_DOMAIN",
"identifier": CUSTOMER_DOMAIN
},
"verificationMethod": "DNS_TXT"
}).execute()
token = response["token"]
print("Site Verification token: " + token)
Langkah 3: Menempatkan token verifikasi
Tulis kode untuk menambahkan token sebagai data TXT di data DNS domain pelanggan.
Untuk domain baru, ini adalah waktu yang tepat untuk menyiapkan
data MX yang diperlukan
untuk Gmail.
Langkah 4: Memicu verifikasi domain
Setelah token ditempatkan sebagai data TXT, Anda dapat memanggil Site Verification API untuk memicu verifikasi. Hal ini dapat dilakukan
dengan memanggil
webResource.insert().
Panggilan akan gagal dengan error 400 jika token yang diharapkan tidak ditemukan. Anda dapat menerapkan strategi coba lagi backoff eksponensial hingga panggilan berhasil untuk mengatasi penundaan propagasi DNS.
Jika panggilan ditampilkan tanpa error, Site Verification API akan menganggap domain tersebut telah diverifikasi, dan email apa pun di kolom owners dari webResource adalah pemilik yang terverifikasi.
Mungkin perlu waktu sekitar 3 jam agar status verifikasi dipropagasi ke akun Google Workspace pelanggan Anda. Anda dapat memaksa status untuk
dipropagasi secara instan dengan menetapkan admin pelanggan (dibuat saat Anda memanggil
provisionCloudIdentity)
sebagai owner dari webResource.
C#
// Set the customer's admin user as an owner to make sure the domain
// verification status is instantly propagated to the Workspace account
string[] owners = { "admin@" + customerDomain };
var resource = new SiteVerificationWebResourceResource {
Site = new SiteVerificationWebResourceResource.SiteData {
Type = "INET_DOMAIN",
Identifier = customerDomain
},
Owners = owners
};
resource = verificationService.WebResource.Insert(resource, "DNS_TXT").Execute();
Console.WriteLine("=== Domain has been verified");
Go
// Set the customer's admin user as an owner to make sure the domain
// verification status is instantly propagated to the Workspace account
resource := &siteverification.SiteVerificationWebResourceResource{
Site: &siteverification.SiteVerificationWebResourceResourceSite{
Type: "INET_DOMAIN",
Identifier: customerDomain,
},
Owners: []string{"admin@" + customerDomain},
}
resource, err := verificationService.WebResource.Insert("DNS_TXT", resource).Do()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("=== Domain has been verified")
}
Java
// Set the customer's admin user as an owner to make sure the domain
// verification status is instantly propagated to the Workspace account
SiteVerificationWebResourceResource resource =
new SiteVerificationWebResourceResource()
.setSite(new SiteVerificationWebResourceResource.Site()
.setIdentifier(CUSTOMER_DOMAIN)
.setType("INET_DOMAIN"))
.setOwners(Arrays.asList("admin@" + CUSTOMER_DOMAIN));
resource = verificationService.webResource().insert("DNS_TXT", resource).execute();
System.out.println("=== Domain has been verified");
Node.js
// Set the customer's admin user as an owner to make sure the domain
// verification status is instantly propagated to the Workspace account
await verificationService.webResource.insert({
verificationMethod: 'DNS_TXT',
requestBody: {
site: {
type: 'INET_DOMAIN',
identifier: customerDomain,
},
owners: [`admin@${customerDomain}`],
}
});
console.log('=== Domain has been verified');
PHP
// Set the customer's admin user as an owner to make sure the domain
// verification status is instantly propagated to the Workspace account
$resource = new Google_Service_SiteVerification_SiteVerificationWebResourceResource([
'site' => [
'type' => 'INET_DOMAIN',
'identifier' => $CUSTOMER_DOMAIN,
],
'owners' => ['admin@' . $CUSTOMER_DOMAIN]
]);
$resource = $verificationService->webResource->insert('DNS_TXT', $resource);
print '=== Domain has been verified' . PHP_EOL;
Python
# Set the customer's admin user as an owner to make sure the domain
# verification status is instantly propagated to the Workspace account
resource = verification_service.webResource().insert(
verificationMethod="DNS_TXT",
body={
"site": {
"type": "INET_DOMAIN",
"identifier": CUSTOMER_DOMAIN
},
"owners": ["admin@" + CUSTOMER_DOMAIN]
}).execute()
print("=== Domain has been verified")