web-dev-qa-db-fra.com

Comment puis-je me connecter à l'API Google Agenda sans l'authentification oAuth?

J'ai étudié l'API Google Agenda et les documents sur l'authentification ( http://code.google.com/apis/calendar/v3/using.html#auth ). Il semble que le cas d'utilisation mentionné ici soit l'écriture d'une application qui accède au calendrier de l'utilisateur. Cependant, j'écris une page Web qui accédera au calendrier du propriétaire du site Web et affichera uniquement les informations de ce calendrier. Donc, je ne veux pas que l'utilisateur entre ses informations de compte Google, ce que oAuth veut faire.

Fondamentalement, je cherche un moyen d'accéder à un seul calendrier Google privé et de s'y authentifier en transmettant les informations d'identification directement au service.

Il y a des questions similaires ici: Comment utiliser OAuth avec Google Agenda pour accéder à UN seul calendrier? qui semble indiquer que l'affiche transmettait directement les informations d'identification à l'origine. Cette fonctionnalité est-elle toujours disponible? Comment gérez-vous le cas d'utilisation que j'ai décrit?

29
Jon Hargett

J'ai le même problème. J'ai trouvé ce tutoriel en 3 parties qui fait exactement ce que vous voulez. page Web pour les réservations
Vous créez une page Web qui écrit directement dans votre propre calendrier (pas les utilisateurs) et c'est pourquoi les utilisateurs n'ont pas à vous donner la permission d'accéder à leur calendrier.
Cette solution fonctionne pour moi, mais vous devez la gérer directement avec REST.

Je cherche un moyen d'utiliser le client php google api car il semble un peu plus simple. Mais je n'ai pas encore trouvé un moyen de modifier correctement le fichier google-api-php-client/src/config.php pour fonctionner de manière à vous authentifier et non à l'utilisateur réel, car vous avez besoin d'accéder à votre calendrier. Si quelqu'un a une idée ou un script qui le ferait, je lui en serais très reconnaissant.

11
Andrej Bergant

Si je ne me trompe pas, ils ont lancé le compte de service pour cela maintenant: https://developers.google.com/accounts/docs/OAuth2ServiceAccount

Modifier:

Voici la modification de leur API de prédiction

session_start();
require_once "google-api-php-client/src/Google_Client.php";
require_once "google-api-php-client/src/contrib/Google_CalendarService.php";

const CLIENT_ID = '...';
const SERVICE_ACCOUNT_NAME = '...';

// Make sure you keep your key.p12 file in a secure location, and isn't
// readable by others.
const KEY_FILE = '...';

$client = new Google_Client();
$client->setApplicationName("...");


if (isset($_SESSION['token'])) {
 $client->setAccessToken($_SESSION['token']);
}

// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array('https://www.googleapis.com/auth/calendar', "https://www.googleapis.com/auth/calendar.readonly"),
    $key)
);

$client->setClientId(CLIENT_ID);
$service = new Google_CalendarService($client);

//Save token in session
if ($client->getAccessToken()) {
  $_SESSION['token'] = $client->getAccessToken();
}

//And now you can use the code in their PHP examples, like: $service->events->listEvents(...)
16
gX.

Jetez également un œil ici:

https://github.com/googleapis/google-api-php-client#authentication-with-service-accounts

Après avoir créé un compte de service, vous pouvez vous authentifier sans que l'utilisateur invite à ajouter des éléments à un calendrier appartenant à votre service.

0
Vasil Levski