Mengapa memverifikasi domain secara otomatis?
Meskipun Cloud Channel API memungkinkan Anda menyediakan hak Google Workspace dalam skala besar, pelanggan masih perlu melakukan tindakan berikut untuk mengaktifkan layanan.
- Setujui 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 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 projectGoogle Cloud dan membuat akun layanan untuk memanggil Cloud Channel API.
Baca tentang Operasi Layanan Saluran.
Sebaiknya gunakan Partner Sales Console Uji untuk codelab ini.
Codelab ini juga mengharuskan Anda telah menyelesaikan codelab penyediaan menyeluruh 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, Ads, dll.). Proses yang dijelaskan di sini bergantung pada penetapan super admin domain reseller Anda sebagai "pemilik" domain dan menetapkan admin pertama pelanggan sebagai rekan pemilik. Anda dapat mempelajari konsep tersebut lebih lanjut 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 seluruh domain
menggunakan akun admin super domain reseller Anda.
- Di baris dengan akun layanan Anda, klik Edit.
- Masukkan
https://www.googleapis.com/auth/siteverification
di kolom Cakupan OAuth. - Klik Otorisasi.
- 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 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 Pengujian, 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: Tempatkan 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 dilakukan
dengan memanggil
webResource.insert()
.
Panggilan gagal dengan error 400 jika token yang diharapkan tidak ditemukan. Anda dapat menerapkan strategi percobaan ulang backoff eksponensial hingga panggilan berhasil untuk mengganti penundaan propagasi DNS.
Jika panggilan ditampilkan tanpa error, Site Verification API akan menganggap
domain telah diverifikasi, dan email apa pun di kolom owners
dari
webResource
adalah pemilik terverifikasi.
Mungkin perlu waktu sekitar 3 jam agar status verifikasi diterapkan
ke akun Google Workspace pelanggan Anda. Anda dapat memaksa status untuk
di-propagasi 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")