2014-12-16 26 views
14
ile çoklu sertifikalar

Azure kullanıcılarının Azure Hizmet Yönetimi API'sini kullanarak aboneliklerini/hizmetlerini görüntülemelerini sağlayan bir Windows Phone 8.1 uygulaması yapıyorum. Kimlik doğrulama yönetim sertifikası kullanılarak yapılır ve sertifika API tüm isteklerine bağlıdır. Tek bir kullanıcı için iyi çalışıyor. Ancak, birden fazla abonelik için bir özellik eklemeye çalıştığımda sorun ortaya çıkıyor. Sertifikayı sertifika deposuna yükleyebilir ve alabilirim. Ancak, isteği API'ya gönderdiğimde sorun ortaya çıkıyor. Doğru sertifikayı eklesem de 403 yasak hatası alıyorum. İşte kullandım koddur. HttpClient

public async Task<Certificate> GetCertificate() 
{ 
      await CertificateEnrollmentManager.ImportPfxDataAsync(Certificate, "", ExportOption.Exportable, KeyProtectionLevel.NoConsent, InstallOptions.None, SubscriptionID); 
      CertificateQuery query = new CertificateQuery(); 
      query.FriendlyName = SubscriptionID; 
      var c = await CertificateStores.FindAllAsync(query); 
      return c[0]; 
} 

public async Task<HttpResponseMessage> SendRequest(string url,string version) 
{ 
     HttpResponseMessage response = null; 
     try 
     { 
      HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter(); 
      filter.ClientCertificate = await GetCertificate(); 
      HttpClient client = new HttpClient(filter); 
      HttpRequestMessage request = new HttpRequestMessage(); 
      request.RequestUri = new Uri(url); 
      request.Headers.Add("x-ms-version", version); 
      response = await client.SendRequestAsync(request, 0); 
      return response; 
     } 
     catch(Exception e) 
     { 
      var status=Windows.Web.WebError.GetStatus(e.HResult); 
      if (status == WebErrorStatus.CannotConnect) 
       throw new Exception("Cannot connect to internet. Check your connection."); 
      else if (status == WebErrorStatus.Disconnected) 
       throw new Exception("Connection was disconnected."); 
      else if (status == WebErrorStatus.ServiceUnavailable) 
       throw new Exception("Server was unavailable"); 
      else if (status == WebErrorStatus.ConnectionReset) 
       throw new Exception("Connection was reset."); 
      else if (status == WebErrorStatus.BadGateway) 
       throw new Exception("Bad gateway."); 
      else if (status == WebErrorStatus.InternalServerError) 
       throw new Exception("Internal server error occurred"); 
      else if (status == WebErrorStatus.HostNameNotResolved) 
       throw new Exception("Check your network connection. Host name could not be resolved."); 
     } 
     return response; 

} 

Windows Phone işletim sistemi, bir uygulama için sertifika kısıtlamalar var mı?

+0

:

Azure Service Management API için yerli istemci uygulama erişim izni. Tahmin ettiğim yönetim son noktası aynı etki alanıdır. Bu temel kütüphaneleri devlet ve "önbelleğe alma" bir bakıma istemci sertifikası ile ilgisi olduğunu düşünüyorum. Bu problemden ya da bir çözümden hiç bahsetmedim. Windows 7 5'te – ameer

+0

, ben kendinden imzalı sertifikalar kullanamadı hatırlıyorum. Kendi kök CA'nızı mağazaya kurmanız mı gerekiyor? –

cevap

1

Sertifika sorununuzla nasıl baş edeceğinizi doğrudan yanıtlamadan, size daha iyi çalışacak bir geçici çözüm öneririm.

OAuth yetkilendirmesini, sertifikalar yerine Hizmet API'si için Bearer jetonu ve Azure AD kimlik doğrulaması ile kullanın. Bu nedenle, birden fazla sertifikayı yönetmek yerine, Azure AD'den bir jeton almak için ADAL kullanacaksınız. Ve aldığınız tek belirteç kullanıcısının erişebildiği tüm abonelikler için geçerli olacaktır.

Sen authenticating service management API calls with Azure AD here daha fazla bilgi bulabilirsiniz.

more about using ADAL with Windows Phone app here'u da öğrenebilirsiniz. Aynı etki karşı istek için istemci sertifikası değiştirmeye çalışırken Benzer bir şey yaşadıysanız

enter image description here