2013-06-07 35 views
7

MVC web sitemde google analytics API'sini kullanmak istiyorum, api servis hesabı ve oauth2'yi kullanarak localhost'umda sorun yok, ancak Azure'a dağıttığım anda bir 502 hatası alıyorum :Google Analytics Azure'da Api

"502 - Web server received an invalid response while acting as a gateway or proxy server. There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server."

heres kodum: buna neden neyin

const string ServiceAccountUser = "[email protected]count.com"; 
AssertionFlowClient client = new AssertionFlowClient(
     GoogleAuthenticationServer.Description, 
      new X509Certificate2(System.Web.Hosting.HostingEnvironment.MapPath("/Areas/Admin/xxxxxxxxxxxxxxxxxx-privatekey.p12"), 
       "notasecret", X509KeyStorageFlags.Exportable)) 
     { 
      Scope = AnalyticsService.Scopes.AnalyticsReadonly.GetStringValue(), 
      ServiceAccountId = ServiceAccountUser //Bug, why does ServiceAccountUser have to be assigned to ServiceAccountId 
      //,ServiceAccountUser = ServiceAccountUser 
     }; 
     OAuth2Authenticator<AssertionFlowClient> authenticator = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState); 

ben çözemiyorum? Azure'da bir şey eksik mi?

Yardımlarınız için teşekkür ederiz.

cevap

9

Bu aynı sorun üzerinde saatlerce acı çektikten sonra, çeşitli bilgi kaynaklarını bir araya getirerek bir iş buldum. sorun benim kodunda bu hat, yani Azure sitesinden p12 dosyasını okumaya çalışırken doğar

var key = new X509Certificate2(keyFile, keyPassword, X509KeyStorageFlags.Exportable); 

Hiçbir fikrim neden başarısız olur ama bir cer halinde dosya bölme çalışır ve key.xml dosyası? Öncelikle

, bu dosyaları ayıklamak, o zaman

//Store the authentication description 
AuthorizationServerDescription desc = GoogleAuthenticationServer.Description; 

//Create a certificate object to use when authenticating 

var rsaCryptoServiceProvider = new RSACryptoServiceProvider(); 
rsaCryptoServiceProvider.FromXmlString(File.ReadAllText(keyFile)); 
var key = new X509Certificate2(certFile) {PrivateKey = rsaCryptoServiceProvider}; 


//Now, we will log in and authenticate, passing in the description 
//and key from above, then setting the accountId and scope 
var client = new AssertionFlowClient(desc, key) 
{ 
    //cliendId is your SERVICE ACCOUNT Email Address from Google APIs Console 
    //looks something like [email protected] 
    //~IMPORTANT~: this email address has to be added to your Google Analytics profile 
    // and given Read & Analyze permissions 
    ServiceAccountId = clientId, 
    Scope = "https://www.googleapis.com/auth/analytics.readonly" 
}; 

//Finally, complete the authentication process 
//NOTE: This is the first change from the update above 
var auth = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState); 

//First, create a new service object 
//NOTE: this is the second change from the update 
//above. Thanks to James for pointing this out 
var gas = new AnalyticsService(new BaseClientService.Initializer { Authenticator = auth }); 
Bu artık benim için çalışıyor

ve benzeri onları yüklemek

// load pfx/p12 as "exportable" 
var p12Cert = new X509Certificate2(@"c:\Temp\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12", "notasecret", X509KeyStorageFlags.Exportable); 

// export .cer from .pfx/.p12 
File.WriteAllBytes(@"C:\Temp\MyCert.cer", p12Cert.Export(X509ContentType.Cert)); 

// export private key XML 
string privateKeyXml = p12Cert.PrivateKey.ToXmlString(true); 

File.WriteAllText(@"C:\Temp\PrivateKey.xml", privateKeyXml); 

Daha sonra web sitenize kopyalamak (Ben sadece bir konsol uygulaması kullanılır) Umarım size yardımcı olur.

+1

Şaşırtıcı mükemmel çalıştı! Çok teşekkür ederim, yardımın olmadan bunu asla elde edemezdim. –

+0

Goodone Martyn İşte Google Analytics api uygulamasında çok fazla yardımımız yok ve nihayetinde problemi kendimiz çözmek zorundayız. –

16

Ayrıca, aynı soruna da rastladım ancak X509KeyStorageFlags.MachineKeySet'u yapıcıya ileterek sorunu benim için de çözdüm.

X509Certificate2 certificate = new X509Certificate2(file, "key", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet); 
+0

Aman Tanrım. Benim için mükemmel çalıştı. X509KeyStorageFlags.MachineKeySet bayrağını kurucuya nasıl eklediniz? Bu neden çalışıyor? –

+0

Aslında, bu benim için işe yaramadı. Aralıklı 502 hataları almaya devam ediyorum. –

+0

Bu benim için de mükemmel çalıştı! Paylaşım için teşekkürler! – saurabhj