Mengapa mengotomatiskan verifikasi domain?
Meskipun Cloud Channel API memungkinkan Anda untuk menyediakan hak Google Workspace dalam skala besar, pelanggan masih harus melakukan tindakan berikut untuk mengaktifkan layanan.
- Menyetujui Persyaratan Layanan
- Memverifikasi kepemilikan domain
- Siapkan data MX
Pelanggan yang baru dibuat akan mengikuti proses persyaratan terpandu saat mereka mengakses konsol admin (di admin.google.com) untuk pertama kalinya.
Jika memiliki akses terprogram ke data DNS domain (misalnya, jika Anda menjual kembali domain kepada pelanggan), Anda dapat mengotomatiskan langkah 2 dan 3 untuk meningkatkan tingkat aktivasi karena langkah tersebut biasanya memerlukan pengetahuan teknis dari pelanggan reseller.
Codelab ini menjelaskan cara menggunakan Site Verification API untuk menerapkan otomatisasi ini.
Sebelum memulai
Pastikan Anda menyelesaikan codelab penyiapan API untuk menyiapkan project Google Cloud dan membuat akun layanan untuk memanggil Cloud Channel API.
Baca operasi Layanan Saluran.
Sebaiknya gunakan Test Partner Sales Console untuk codelab ini.
Anda juga diharapkan telah menyelesaikan codelab penyediaan Workspace secara menyeluruh.
Ringkasan
Verifikasi 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 sebagai "pemilik" domain dan penetapan admin pertama pelanggan sebagai rekan pemilik. Anda dapat mempelajari konsep tersebut lebih lanjut di halaman Mulai menggunakan Site Verification API.
Langkah 1: Bersiap untuk Site Verification API
- Buka bagian API Library di Konsol Google Cloud dan aktifkan Site Verification API.
- Buka Halaman delegasi seluruh domain menggunakan akun admin super domain reseller Anda.
- Di baris yang berisi akun layanan Anda, klik Edit.
- Masukkan
https://www.googleapis.com/auth/siteverification
di kolom OAuth Scopes. - Klik Authorize.
- Instal library klien Site Verification API.
Langkah 2: Dapatkan token verifikasi
Codelab ini akan berfokus pada cara paling umum untuk memverifikasi domain: menggunakan data DNS TXT
. Site Verification API mendukung
metode verifikasi lain.
Untuk mengambil token yang akan ditempatkan sebagai data TXT
, Anda perlu mendapatkan token untuk type=INET_DOMAIN
dan verificationMethod=DNS_TXT
.
Pada 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 Partner Sales Console Pengujian, pastikan domainnya 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: Tempatkan token verifikasi
Tulis kode untuk menambahkan token sebagai data TXT
di data DNS domain pelanggan.
Untuk domain baru, inilah saat yang tepat untuk menyiapkan
data MX
yang diperlukan
untuk Gmail.
Langkah 4: Picu verifikasi domain
Setelah token ditempatkan sebagai data TXT
, Anda dapat memanggil Site Verification API untuk memicu verifikasi. Hal ini dilakukan
dengan memanggil
webResource.insert()
.
Panggilan akan gagal dengan error 400 jika token yang diharapkan tidak ditemukan. Anda dapat menerapkan strategi percobaan ulang backoff eksponensial hingga panggilan berhasil menggantikan penundaan propagasi DNS.
Jika panggilan tidak ditampilkan tanpa error, Site Verification API akan mempertimbangkan
domain untuk diverifikasi, dan semua email di kolom owners
pada
webResource
adalah pemilik terverifikasi.
Mungkin perlu waktu sekitar 3 jam agar status verifikasi diterapkan
ke akun Google Workspace pelanggan Anda. Anda dapat memaksa status agar diterapkan secara instan dengan menyetel admin pelanggan (yang 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")