2015-05-08 5 views
12

Ich verwende die Klasse This GoogleJsonWebToken, um ein Zugriffstoken zu generieren, das mit Json-Aufrufen der Google Kalender-API verwendet werden kann. Es funktioniert völlig in Ordnung in IIS Express auf meinem dev Maschine, wenn ich die folgende verwenden (mein tatsächliches Dienstkonto E-Mail mit):502 Fehler beim Generieren von X509Certificate2 von p12-Zertifikat in Azure-Websites für Google API

string p12Path = HttpContext.Current.Server.MapPath("~/App_Data/certificate.p12"); 
var auth = GoogleJsonWebToken.GetAccessToken("[email protected]", 
              p12Path, 
              "https://www.googleapis.com/auth/calendar"); 
string Token = auth["access_token"]; 

Um dies zu testen, ich bin nur @Token in meinem cshtml Rasierer Ansicht aufrufen. Wenn ich das auf meiner Azure-Website veröffentliche, funktioniert es nicht. Wenn ich die GoogleJsonWebToken Klasse unverändert lasse, bekomme ich eine sehr unheilvolle 502 - Web server received an invalid response while acting as a gateway or proxy server. ohne weitere Informationen.

Nach einigen Google-Suchen fand ich this SO post, die ein ähnliches Problem ist. Also habe ich versucht ihre Lösung Ich bekomme System.Security.Cryptography.CryptographicException: The system cannot find the file specified., wenn das von meiner Azure-Website ausgeführt wird. Wenn es von meinem Dev-Rechner läuft, bekomme ich System.Net.WebException: The remote server returned an error: (400) Bad Request., was ich denke, ist mit dieser Lösung CspKeyContainerInfo.KeyContainerName ist null während die ursprüngliche unmodifizierte Klasse, wenn auf meinem Dev-Rechner läuft mir etwas wie {C0E26DC5-5D2C-4C77-8E40-79560F519588}, die jedes Mal zufällig generiert wird und dieser Wert verwendet wird bei der Unterzeichnung der Unterschrift.

Ich fand dann this SO post, aber diese Lösung ergab die gleichen Ergebnisse wie die letzte Lösung.

Ich habe auch die meisten der verschiedenen Kombinationen von X509KeyStorageFlags vergeblich versucht.

Wie kann ich entweder CspKeyContainerInfo.KeyContainerName selbst generieren oder die X509Certificate2 anderweitig erfolgreich generieren?

Antwort

20

Ich fand die Lösung auf this MSDN forum post. Grundsätzlich musste ich X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet setzen, wie ich in der ersten SO-Post, die ich erwähnt habe, gelesen habe und dann brauchte ich Flags = CspProviderFlags.UseMachineKeyStore in meinem CspParamaters.

Ich habe meine full solution on GitHub

+0

Ja, das tat es für mich – NicoJuicy

+0

Genau das gleiche Problem. Ersetzen X509KeyStorageFlags.DefaultKeySet mit X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet hat den Trick gemacht. Danke vielmals. – JCallico

-1

Erstens geschrieben, sollten Sie die p12-Datei Ressourcen hinzufügen:

Recht Projekt klicken Sie - Eigenschaften - Ressourcen - füge Ressource und nach dieser Verwendung dieser Codezeile für die Zertifikat

var certificate = new X509Certificate2((byte[])Properties.Resources.ResourceManager.GetObject(ResourceName), "!password!", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); 
Verwandte Themen