Por que automatizar a verificação de domínio?
A API Cloud Channel permite provisionar o Google Workspace direito em grande escala, o cliente ainda precisa realizar as seguintes ações: para ativar serviços.
- Aceitar os Termos de Serviço
- Verificar a propriedade do domínio
- Configurar registros MX
Um cliente recém-criado vai seguir um processo de requisitos guiado ao acessar o Admin Console (em admin.google.com) pela primeira vez.
Se você tiver acesso programático aos registros DNS do domínio (por exemplo, (caso tenha revendido o domínio para o cliente), poderá automatizar as etapas 2 e 3 para aumente as taxas de ativação, pois essas etapas normalmente exigem conhecimento de um cliente de revenda.
Este codelab explica como usar a API Site Verification para implementar essa automação.
Antes de começar
Conclua o codelab de configuração de API para configurar um projeto do Google Cloud e criar uma conta de serviço para chamar a API Cloud Channel.
Leia sobre as operações do Channel Services.
Recomendamos usar o Partner Sales Console de teste para este codelab.
Este codelab também espera que você tenha concluído o codelab de provisionamento de ponta a ponta do Workspace.
Visão geral
A verificação do domínio dos direitos do Google Workspace envolve várias APIs chamadas.
A API Site Verification não é específica para revendedores. Domínio a verificação é um indicador usado em vários produtos do Google (Search Console, Google Ads etc.). O processo descrito aqui depende da configuração do superadministrador do domínio do revendedor como "proprietário" do domínio e da configuração do primeiro administrador do cliente como coproprietário. Saiba mais sobre esses conceitos na página Primeiros passos com a API Site Verification.
Etapa 1: se preparar para a API Site Verification
- Acesse a seção Biblioteca de APIs no console do Google Cloud e ative a API Site Verification.
- Acesse o
Página de delegação em todo o domínio
usando a conta de superadministrador do domínio do revendedor.
- Na linha da conta de serviço, clique em Editar.
- Digite
https://www.googleapis.com/auth/siteverification
no Escopos do OAuth. - Clique em Autorizar.
- Instale o Biblioteca de cliente da API Site Verification.
Etapa 2: receber o token de verificação
Este codelab vai se concentrar na maneira mais comum de verificar um domínio: usando registros DNS TXT
. A API Site Verification oferece suporte
outros métodos de verificação.
Para recuperar o token que você colocará como um registro TXT
, será necessário
receber tokens para type=INET_DOMAIN
e verificationMethod=DNS_TXT
.
No código abaixo, preencha essas variáveis com suas informações.
jsonKeyFile
: O caminho para o arquivo de chave JSON gerado quando você criou uma conta de serviço.resellerAdminUser
: o endereço de e-mail de um superadministrador de domínio de revendedor.customerDomain
: o domínio do cliente final. Se você executar este codelab no Partner Sales Console de teste, verifique se o domínio segue as convenções de nomeação de domínio.
C#
Usando as seguintes importações:
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.SiteVerification.v1;
using Google.Apis.SiteVerification.v1.Data;
Crie o cliente da API e extraia o 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
Usando as seguintes importações:
import (
"context"
"fmt"
"os"
"golang.org/x/oauth2/google"
"google.golang.org/api/option"
"google.golang.org/api/siteverification/v1"
)
Crie o cliente da API e busque o 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
Usando as seguintes importações:
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;
Crie o cliente da API e extraia o 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
Usando a seguinte importação:
const {google} = require('googleapis');
Crie o cliente da API e busque o 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
Crie o cliente da API e extraia o 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
Usando as seguintes importações:
from google.oauth2 import service_account
from apiclient.discovery import build
Crie o cliente da API e extraia o 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)
Etapa 3: adicionar o token de verificação
Escreva o código para adicionar o token como um registro TXT
no domínio do cliente
registros DNS.
Para novos domínios, é uma boa hora de configurar
os registros MX
necessários
para o Gmail.
Etapa 4: acionar a verificação de domínio
Quando o token é colocado como um registro TXT
, é possível chamar o método
a API Site Verification para acionar a verificação. Para isso,
chame
webResource.insert()
.
A chamada falhará com um erro 400 se o token esperado não for encontrado. Você pode implementar uma estratégia de nova tentativa com espera exponencial até que a chamada seja bem-sucedida para fazer os atrasos na propagação de DNS.
Se a chamada retornar sem erros, a API de verificação de site vai considerar
que o domínio foi verificado, e todos os e-mails no campo owners
do
webResource
serão considerados proprietários verificados.
Pode levar cerca de três horas para que o status de verificação seja propagado
para a conta do Google Workspace do cliente. É possível forçar o status a
automaticamente ao configurar o administrador do cliente (criado quando você ligou
provisionCloudIdentity
)
como um owner
do 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")