8

Ich habe eine C# .net Web-Anwendung, die ich zum Hochladen von Videos auf Youtube verwenden. Das hat vor etwa 6 Monaten funktioniert, aber jetzt funktioniert es nicht mehr. Der folgende Code hängt nur, wenn ich meine Website über Visual Studio auf meinem lokalen Computer starten:GoogleWebAuthorizationBroker.AuthorizeAsync friert ein

 UserCredential credentialS; 
    using (var auth_stream = new FileStream(Server.MapPath("~/YouTube/client_secrets.json"), FileMode.Open, FileAccess.Read)) 
    { 
     credentialS = await GoogleWebAuthorizationBroker.AuthorizeAsync(
      new ClientSecrets 
      { 
       ClientId = "blahblah-myDetailsBlahBLah.apps.googleusercontent.com", 
       ClientSecret = "myClientSecret", 
      }, 
      // This OAuth 2.0 access scope allows an application to upload files to the 
      // authenticated user's YouTube channel, but doesn't allow other types of access. 
      new[] { YouTubeService.Scope.YoutubeUpload }, 
      "user", 
      CancellationToken.None 
     ); 
    } 

ich auch notived:

 UserCredential credential; 
    using (var auth_stream = new FileStream(Server.MapPath("~/YouTube/client_secrets.json"), FileMode.Open, FileAccess.Read)) 
    { 
     credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
      GoogleClientSecrets.Load(auth_stream).Secrets, 
      // This OAuth 2.0 access scope allows an application to upload files to the 
      // authenticated user's YouTube channel, but doesn't allow other types of access. 
      new[] { YouTubeService.Scope.YoutubeUpload }, 
      "user", 
      CancellationToken.None 
     ); 
    } 

Ich habe auch die folgenden nach einem Blick auf andere Beiträge auf Stack-Überlauf versucht dass ich die Version 1.7.0-Beta der Google-APIs verwendet habe, sodass ich ein Upgrade über die PackageManager-Konsole auf Version 1.8.2 durchgeführt habe.

Ich habe auch eine neue Client Secret über die Google Developer Console generiert und diese auf meiner Website verwendet.

Aber nach dem Ausprobieren dieser Schritte bleibt der Anruf an GoogleWebAuthorizationBroker.AuthorizeAsync immer noch hängen. Ich stelle fest, dass meine Website in meinem lokalen Browser aktualisiert wird, als ob versucht wird, eine Verbindung herzustellen, aber der Anruf ist niemals erfolgreich.

Wie kann ich das lösen ??

+0

Öffnen Sie überprüfen% AppData% Ordner für einen Ordner namens, der etwas wie YouTube in es hat, löschen Sie es erneut versuchen. oder einfach "user" zu "user2" ändern und es erneut versuchen – DaImTo

+0

Es gab einen leeren Ordner Roaming \ Google.Apis.Auth, also löschte ich das und ich änderte auch Benutzer zu user2, aber ich habe immer noch das gleiche Problem –

+0

Könnten Sie eine Firewall haben den Authentifizierungsserver blockieren? – DaImTo

Antwort

1

Ich habe dieses Problem auch mithilfe der Google Kalender-API behoben.

Meine Anwendung scraping Notizen aus verschiedenen Online-Ressourcen und posten sie in einem gemeinsamen Google-Kalender.

Es funktioniert gut in einer Entwicklungsumgebung, aber nicht, wenn ich es auf einer VM, wo es als eine geplante Aufgabe Windows alle 15 Minuten mit einem Dienstkonto in dieser VM ausgeführt wird.

Ich erinnere mich, dass ich beim ersten Setup den Berechtigungsschritt im Browser durchlaufen musste, aber nicht ausgeführt wurde, wenn ich ihn als geplante Aufgabe ausführte.

Ich konnte keinen Weg finden, um über den Browser eine erneute Eingabeaufforderung zu erhalten.

Da das Dienstkonto C: \ Users \\ Documents.credentials \ calendar-dotnet-quickstart Ordner gerade erstellt wurde, kopierte ich einfach den Google.Apis.Auth.OAuth2.Responses.TokenResponse-Benutzer aus dem gleichen Ordner in meiner Entwicklungsumgebung und es funktioniert jetzt gut.

Das ist vielleicht nicht die beste oder ultimative Lösung, aber es funktioniert.

Ich vermute, wenn ich als Dienstbenutzer für die geplante Aufgabe angemeldet war und von der Eingabeaufforderung ausgeführt wurde, würde ich über den Browser aufgefordert werden, die Autorisierung zu erteilen.

Ich hoffe, das hilft jemandem.