Tengo problemas para obtener el código de autenticación en la misma ventana emergente en lugar de redirigir a un usuario a otra página en Google Auth. Estoy tratando de acceder a la API de análisis de Google y, para eso, estoy usando la autenticación 2. ¿Qué debo cambiar para obtener el código de autenticación en el mismo aviso de Google? FYI: Estoy usando WordPress.
Ediciones: he creado el nuevo cliente de escritorio de autenticación y ahora puedo configurar el URI de redirección como se mencionó anteriormente, y al usarlo puedo crear el código de autenticación y el token de acceso. Sin embargo, recibo el error ACCESS_TOKEN_SCOPE_INSUFFICIENT cuando llamo a la API de administración. Revisé la API de administración y datos y ambas están habilitadas en mi consola de Google. Lo mismo funciona bien cuando uso el cliente de autenticación de la aplicación web, pero nuestro requisito es usar el complemento instalado, ya que proporciona el código de autenticación dentro del aviso.
A continuación se muestra el proceso de creación de access_token que funciona bien:
if (isset($_POST["save_code"]) && isset($_POST["access_code"])) {
$authCode = $_POST["access_code"];
$client = new Google_Client();
$client->setClientId('***');
$client->setClientSecret('***');
$client->setDeveloperKey('***');
// $client->addScope('https://www.googleapis.com/auth/analytics.readonly');
$client->setScopes([
'https://www.googleapis.com/auth/analytics',
'openid',
'https://www.googleapis.com/auth/analytics.readonly'
]);
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$client->setAccessType('offline');
$client->setIncludeGrantedScopes(true);
$client->authenticate($authCode);
$access_token = $client->getAccessToken();
var_dump($access_token);
// echo "<pre>";
// print_r($access_token);
// exit;
}
$url = http_build_query(
array(
'next' => 'http://myproject.local.com/wp-admin/admin.php?page=analytify-settings',
'scope' => 'https://www.googleapis.com/auth/analytics',
'response_type' => 'code',
'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
'client_id' => '***'
)
);
?>
<form action="<?php echo str_replace('%7E', '~', $_SERVER['REQUEST_URI']); ?>" method="post" name="settings_form" id="settings_form">
<table width="1004" class="form-table">
<tbody>
<tr>
<th width="115">Authentication:</th>
<td width="877">
<a target="_blank" href="javascript:void(0);" onclick="window.open('https://accounts.google.com/o/oauth2/auth?<?php echo $url ?>', 'activate', 'width=700,height=500,toolbar=0,menubar=0,location=0,status=1,scrollbars=1,resizable=1,left=0,top=0');">Click here to Authenticate</a>
</td>
</tr>
<tr>
<th>Your Access Code:</th>
<td>
<input type="text" name="access_code" value="" style="width:450px;" />
</td>
</tr>
<tr>
<th></th>
<td>
<p class="submit">
<input type="submit" class="button-primary" value="Save Changes" name="save_code" />
</p>
</td>
</tr>
</tbody>
</table>
</form>
Creando el cliente de administración:
$admin_client = new AnalyticsAdminServiceClient([
'credentials' => GoogleApiCoreCredentialsWrapper::build([
'scopes' => [
'https://www.googleapis.com/auth/analytics',
'openid',
'https://www.googleapis.com/auth/analytics.readonly',
],
'keyFile' => [
'type' => 'authorized_user',
'client_id' => '***',
'client_secret' => '***',
'refresh_token' => 'my refresh token'
],
]),
]);
$accounts = $this->admin_client->listAccountSummaries();
El código anterior da este error:
Error fatal: GoogleApiCoreApiException no detectado: { «motivo»: «ACCESS_TOKEN_SCOPE_INSUFFICIENT», «dominio»: «googleapis.com», «errorInfoMetadata»: { «método»: «google.analytics.admin.v1alpha.AnalyticsAdminService.ListAccountSummaries «, «servicio»: «analyticsadmin.googleapis.com» }, «mensaje»: «La solicitud tenía alcances de autenticación insuficientes», «código»: 7, «estado»: «PERMISSION_DENIED», «detalles»: [ { «@type»:
«type.googleapis.com/google.rpc.ErrorInfo», «reason»:
«ACCESS_TOKEN_SCOPE_INSUFFICIENT», «domain»: «googleapis.com»,
«metadata»: { «method»:
«google.analytics.admin.v1alpha.AnalyticsAdminService.ListAccountSummaries»,
«service»: «analyticsadmin.googleapis.com» } } ] } lanzado en pathToProjectvendorgooglegaxsrcApiException.php en la línea 260
.