2014-09-15 9 views
11

Quando chiamo le API di Google da un sito Web di Azure, ottengo 502 - Il server Web ha ricevuto una risposta non valida mentre fungeva da gateway o server proxy. Il codice esatto funziona sia dalla mia macchina locale che da una macchina virtuale di Azure.502 Risposta non valida quando si chiama Google Api dal sito Web di Azure

Il codice è semplicemente quello di ottenere un nome visualizzato da un utente di Google id

private string GetUserDetails(string userId) 
{ 
    var serviceAccountEmail = "[email protected]nt.com"; 
    var certFile = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/googlekey.p12"); 
    var certificate = new X509Certificate2(certFile, "notasecret", X509KeyStorageFlags.Exportable); 

    var credential = new ServiceAccountCredential(
     new ServiceAccountCredential.Initializer(serviceAccountEmail) 
     { 
      Scopes = new[] { PlusService.Scope.PlusMe } 
     }.FromCertificate(certificate)); 

    var service = new PlusService(new BaseClientService.Initializer() 
    { 
     HttpClientInitializer = credential, 
     ApplicationName = "Bayfront" 
    }); 

    var request = service.People.Get(userId); 
    var person = request.Execute(); 
    return person.DisplayName; 
} 

Questo è stato chiamato in un progetto WebAPI, ma ho estratto a una singola pagina web form asp.net a http://testgplus.azurewebsites.net/

Ho anche provato un semplice client REST con un ApiKey invece di utilizzare il precedente. Di nuovo questo funziona sulla VM, ma non sul sito web, dove ottengo il 403 Proibito. Ho aggiunto gli indirizzi IP del sito web & alla VM alla Google Developers Console.

private string GetUserDetails2(string userId) 
{ 
    var client = new RestClient("https://www.googleapis.com/plus/v1/people/" + userId); 
    var request = new RestRequest(Method.GET); 
    request.AddParameter("key", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
    var response = client.Execute(request); 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(response.Content); 

     return result["name"]["givenName"]; 
    } 
    return response.StatusCode.ToString(); 
} 

Sembra che non sia possibile chiamare un servizio Web esterno per un sito Web di Azure. Ho visto alcuni problemi simili, ad es. 502 requesting payment service inside azure 'website', ma nessuno dei suggerimenti ha funzionato. Qualcuno ha qualche idea su quale potrebbe essere la causa o la correzione?

risposta

1

. Ciao Colin Mierowsky

Dove si crea il certificato, in Application_Start o nel metodo WebApiConfig Register?

dove usare questo codice?

makecert -r -n "CN=abdullahsargin.com, [email protected]" -sky exchange -b 11/01/2015 -pe -sv myhost.pvk myhost.cer 

pvk2pfx -pvk myhost.pvk -spc myhost.cer -pfx myhost.pfx -po Test.123 

In global.asax Application_Start

  try 
     { 
      var certFile = Server.MapPath("~/App_Data/myhost.pfx"); 
      var cert = new X509Certificate2(certFile, "Test.123", 
       X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable); 
     } 
     catch (Exception exc) 
     { 
      _tools.LogError(exc); 
     } 

. questo metodo in esecuzione successo sul locale, ma in azzurro ottenere 502 su questo codice, verifico questa riga metodo e riga

var code = await _userManager.GeneratePasswordResetTokenAsync(user.Id); 

completa di questo metodo

[HttpGet, AllowAnonymous] 
    public async Task<HttpResponseMessage> ForgotPassword([FromUri] ForgotPasswordViewModel model) 
    { 
     try 
     {    
      var code = await _userManager.GeneratePasswordResetTokenAsync(user.Id); 

      return Request.CreateResponse(HttpStatusCode.OK, new { model = user }); 

      var url = "http://abdullahsargin.com#/account/resetPassword/" + user.Id + "/" + code; 

      await _userManager.SendEmailAsync(user.Id, "Reset Password", 
      "Please reset your password by clicking here: <a href=\"" + url + "\">link</a>"); 

      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (Exception exc) 
     { 
      MyTools.LogError(exc.GetBaseException()); 
      return Request.CreateResponse(HttpStatusCode.BadRequest, exc.GetBaseException()); 
     } 
    } 

trovo in questa pagina la mia soluzione

ASP.NET Identity: use GeneratePasswordResetToken on Azure website

per la mia soluzione

public UserManager() : base(new UserStore<ApplicationUser>(new MyDbContext())) 
{ 
    // other setup 
    this.UserTokenProvider = new TotpSecurityStampBasedTokenProvider<ApplicationUser, string>(); 
} 
4

Ho visto la tua domanda prima, ma non ho notato la soluzione ... ho subito anche .. Quando si genera l'add certificato:

var certificate = new X509Certificate2(p12Path, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable); 
//(notice the X509KeyStorageFlags.MachineKeySet |) 
Problemi correlati