Bonjour,
Je dispose d'un Google Apps gratuit (j'ai souscrit avant que ça devienne payant).
Dessus, j'ai activé l'API Calendar.
J'ai créé un projet d'API de type Service Account.
Dans la console d'admin j'ai autorisé les requêtes sur l'adresse des API.
J'ai ensuite développé une application qui lit/modifie mon agenda.
Aucun problème, ça fonctionne parfaitement.
Maintenant, je veux déployer mon programme chez un client.
J'ai tout configuré exactement de la même façon, à l'aide non pas du compte admin, mais d'un compte administrateur créé pour l'occasion.
Ce compte a accès à un certain nombre d'autres calendriers, que je peux voir/modifier par l'interface web agenda.
Et pourtant mon programme plante avec une erreur "invalid_grant".
Mon PC est à l'heure.
Je n'ai pas de souci de refresh token étant donné que c'est un service account.
D'où peut venir le problème ?
Aussi, comment puis-je supprimer complètement puis recréer mon projet API dans la console d'admin ?
Voici l'extrait de mon mon code (C#) :
Je sais plus quoi faire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public List<Appointment> LoadAppointments(User user) { // key = chemin d'accès à mon fichier "P12" // password = "notasecret" // googleid = adresse mail qui se termine en "@developer.gserviceaccount.com" // user.ExtertnalLogin = adresse mail du compte à consulter X509Certificate2 certificate = new X509Certificate2(key, password, X509KeyStorageFlags.Exportable); ServiceAccountCredential credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer(googleid) { Scopes = new[] { CalendarService.Scope.Calendar }, User = admin, }.FromCertificate(certificate)); service = new CalendarService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "<AppName>", }); EventsResource.ListRequest req = service.Events.List(user.ExtertnalLogin); req.ShowDeleted = true; req.SingleEvents = true; req.TimeZone = "UTC"; req.MaxResults = 1000; req.UpdatedMin = LastSync; req.TimeMin = DateTime.Today.AddMonths(-2); Events events; try { events = req.Execute(); } catch (Exception e) // L'erreur se produit ici { Console.WriteLine(e.Message); return null; } [...] }
Partager