0

Ich habe versucht, Google Kalender-Event-Sync-Funktionalität zu implementieren, um Ereignis von meiner lokalen Anwendung auf Google Kalender zu planen. Es funktioniert gut im lokalen System, aber wann immer ich es auf dem Server bereitgestellt habe, wird der folgende Fehler ausgegeben.Zugriff auf den Pfad Google.Apis.Auth ist verweigert

System.UnauthorizedAccessException: Zugriff auf den Pfad 'Google.Apis.Auth' verweigert

Unten ist der Code, den ich für gleiche verwenden.

var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
     new ClientSecrets 
     { 
      ClientId = "xxx-9khdjsqifkj2amsji2jce37p8lfn0166.apps.googleusercontent.com", 
      ClientSecret = "ZdsrCa-uwG3GmpVLTfYDli-S", 
     }, 
     new[] { CalendarService.Scope.Calendar }, 
     "user", 
     CancellationToken.None).Result; 

     // Create the service. 
     var service = new CalendarService(new BaseClientService.Initializer 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = Summary, 
     }); 
+0

Sie sollten die Secrete in Ihrem Projekt neu generieren, die Sie Ihre Client-ID mit der Welt geteilt haben, das ist etwas, das Sie für sich behalten sollten. – DaImTo

Antwort

0

standardmäßig die Google .NET-Client-Bibliothek verwendet FileDatastor (Datei) Datenspeicher standardmäßig speichert die Anmeldeinformationen in% AppData%. Wenn Sie Ihre Anwendung ausführen, unter welchen je Benutzer ist es, Sie laufen nicht über apperntly Zugriff auf% AppData%

string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); 

var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
     new ClientSecrets 
     { 
      ClientId = "xxx4671204-9khdjsqifkj2amsji2jce37p8lfn0166.apps.googleusercontent.com", 
      ClientSecret = "ZdsrCa-uwG3GmpVLTfYDli-S", 
     }, 
     new[] { CalendarService.Scope.Calendar }, 
     "user", 
     CancellationToken.None, 
     new FileDataStore(credPath, true)).Result; 

Stellen Sie sicher, dass credPath einen Ort, den Sie haben Zugriff zu schreiben. Ich habe eine Probe auf GitHub für Google calendar Oauth2 und ich habe eine Anleitung, wie filedatastore funktioniert

Verwandte Themen