Maison > Article > développement back-end > Comment configurer le client Golang pour l'API Google Calendar à l'aide d'un compte de service
Comment configurer le client Golang pour l'API Google Calendar à l'aide d'un compte de service ? Il s'agit d'un problème courant que de nombreux développeurs rencontrent lors de l'utilisation de l'API Google Calendar. Dans cet article, l'éditeur PHP Banana vous présentera en détail comment utiliser un compte de service pour configurer le client Golang afin que vous puissiez interagir en douceur avec l'API Google Calendar. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des conseils clairs pour vous aider à démarrer rapidement le processus. Explorons ensemble !
J'ai vu beaucoup de documentation sur le client Google API pour les utilisateurs, mais très peu sur l'utilisation des comptes de service. Cela ne représente pas l'utilisateur, je veux juste que le client utilise l'API du calendrier avec un identifiant client et un secret client, qui me seront fournis via des variables d'environnement (je ne veux pas démarrer à partir d'un fichier).
Voici ce que j'ai jusqu'à présent :
package main import ( "context" clientcredentials "golang.org/x/oauth2/clientcredentials" google "golang.org/x/oauth2/google" calendar "google.golang.org/api/calendar/v3" apioption "google.golang.org/api/option" ) func main() { config := &clientcredentials.config{ clientid: "<my_id>", clientsecret: "-----begin private key-----\n...", tokenurl: google.endpoint.tokenurl, } ctx := context.background() client := config.client(ctx) service, _ := calendar.newservice(ctx, apioption.withhttpclient(client)) calendarlist, err := service.calendarlist.list().do() }
Mais j'obtiens l'erreur suivante :
Get "https://www.googleapis.com/calendar/v3/users/me/calendarList?alt=json&prettyPrint=false": oauth2: cannot fetch token: 400 Bad Request Response: { "error": "unsupported_grant_type", "error_description": "Invalid grant_type: client_credentials" }
Toute aide ici est grandement appréciée ! Je suis nouveau sur Golang, oauth2 et google api :)
La réponse de @tanaike m'a mis sur la bonne voie. Voici ce que j'ai fini par utiliser :
package main import ( "context" "encoding/json" "fmt" googleoauth "golang.org/x/oauth2/google" calendar "google.golang.org/api/calendar/v3" apioption "google.golang.org/api/option" ) var service *calendar.service // note that some of the fields are optional: type googleauthconfig struct { type string `json:"type"` projectid string `json:"project_id,omitempty"` clientemail string `json:"client_email"` clientid string `json:"client_id,omitempty"` clientsecret string `json:"private_key"` clientsecretid string `json:"private_key_id,omitempty"` authurl string `json:"auth_uri,omitempty"` tokenurl string `json:"token_uri,omitempty"` authprovidercerturl string `json:"auth_provider_x509_cert_url,omitempty"` clientcerturl string `json:"client_x509_cert_url,omitempty"` } func main() { authconfig := googleauthconfig{ type: "service_account", clientemail: "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="82e3e1e1edf7ecf6b3b0b1c2f2f0ede8e7e1f6afb6b7b4acebe3eface5f1e7f0f4ebe1e7e3e1e1edf7ecf6ace1edef">[email protected]</a>", clientid: "1234", clientsecret: "-----begin private key-----\n...\n-----end private key-----\n", authurl: googleoauth.endpoint.authurl, tokenurl: googleoauth.endpoint.tokenurl, } authconfigjson, err := json.marshal(authconfig) ctx := context.background() service, err = calendar.newservice(ctx, apioption.withcredentialsjson([]byte(authconfigjson))) }
Notez que je n'ai pas eu à configurer la délégation à l'échelle du domaine ni à usurper l'identité des utilisateurs ; après avoir ajouté le compte de service au calendrier, cela a très bien fonctionné.
Après avoir ajouté l'adresse e-mail du compte au calendrier, le compte de service doit encore accepter l'invitation du calendrier. Cela peut être fait par :
entry := calendar.CalendarListEntry{Id: calendarID} service.CalendarList.Insert(&entry).Do()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!