2015-05-08 8 views
12

Używam klasy This GoogleJsonWebToken do generowania tokenu dostępu, który będzie używany w połączeniu json z interfejsem API Kalendarza Google. To działa perfekcyjnie w IIS Express, na moim komputerze dev kiedy używać następujących (korzysta z mojego konta email rzeczywisty Service)Błąd 502 podczas generowania certyfikatu X509Certificate2 z certyfikatu p12 na stronach internetowych platformy Azure dla interfejsu API Google

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"]; 

Aby to Dzwonię @Token moim zdaniem cshtml brzytwa test. Po opublikowaniu tego na mojej witrynie Azure nie działa. Jeśli zostanę niezmieniony z klasy GoogleJsonWebToken, otrzymam bardzo nieprzydatne 502 - Web server received an invalid response while acting as a gateway or proxy server. bez żadnych innych informacji.

Po kilku przeszukaniach w Google znalazłem this SO post, który jest podobny problem. Więc próbowałem ich rozwiązania, otrzymuję System.Security.Cryptography.CryptographicException: The system cannot find the file specified., gdy jest uruchamiany z mojej witryny Azure. Kiedy jest uruchamiany z mojej maszyny dev dostaję System.Net.WebException: The remote server returned an error: (400) Bad Request., co moim zdaniem to dlatego, że z tym rozwiązaniem CspKeyContainerInfo.KeyContainerName jest null, podczas gdy oryginalna niemodyfikowana klasa po uruchomieniu na mojej maszynie programistycznej daje mi coś w rodzaju {C0E26DC5-5D2C-4C77-8E40-79560F519588}, które jest losowo generowane za każdym razem i ta wartość jest używana w procesie podpisywania podpisu.

Znalazłem this SO post, ale to rozwiązanie przyniosło takie same wyniki, jak ostatnie rozwiązanie.

Próbowałem również większość różnych kombinacji X509KeyStorageFlags bezskutecznie.

Jak samodzielnie wygenerować CspKeyContainerInfo.KeyContainerName lub w inny sposób pomyślnie wygenerować X509Certificate2?

Odpowiedz

20

Znalazłem rozwiązanie na this MSDN forum post. Zasadniczo musiałem ustawić X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet, jak czytam w pierwszym wpisie SO, o którym wspomniałem, a następnie potrzebowałem Flags = CspProviderFlags.UseMachineKeyStore w moich CspParamaters.

Pisałem mój full solution on GitHub

+0

Tak, zrobiłem to dla mnie – NicoJuicy

+0

Dokładnie ten sam problem. Zastępowanie zestawu X509KeyStorageFlags.DefaultKeySet przy użyciu X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet rozwiązało problem. Wielkie dzięki. – JCallico

-1

Po pierwsze, należy dodać plik p12 do zasobów:

prawym przyciskiem myszy na projekt - Właściwości - zasoby - dodaj zasób i po tym wykorzystania tej linii kodu dla certyfikat

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