public async Task <Credential> CreateCertCredentialAsync(CredentialRequestInfo info) { // Handle challenges for a secured resource by prompting for a client certificate. Credential credential = null; try { // Create an X509 store for reading certificates for the current user. var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); // Open the store in read-only mode. store.Open(OpenFlags.ReadOnly); // Get a list of certificates that are currently valid. X509Certificate2Collection certificates = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true); // Create a dialog for showing the list of certificates. ContentDialog dialog = new ContentDialog(); dialog.CloseButtonText = "Select certificate"; // Create a list view for rendering the list. ListView listview = new ListView(); // Use a template defined as a resource in XAML. listview.ItemTemplate = (DataTemplate)this.Resources["CertificateTemplate"]; // Display the items in the listview. listview.ItemsSource = certificates; // Display the listview in the dialog. dialog.Content = listview; // Display the dialog. await dialog.ShowAsync(); // Make sure the user chose a certificate. if (listview.SelectedItems.Count > 0) { // Get the chosen certificate. X509Certificate2 cert = (X509Certificate2)listview.SelectedItem; // Create a new CertificateCredential using the chosen certificate. credential = new Esri.ArcGISRuntime.Security.CertificateCredential(cert) { ServiceUri = new Uri(_serverUrl) }; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } // Return the CertificateCredential for the secured portal. return(credential); }
public async Task <Credential> CreateCredentialAsync(CredentialRequestInfo info) { // Handle challenges for a secured resource by prompting for a client certificate Credential credential = null; // TODO: Remove the following workaround once issue #232 is addressed credential = AuthenticationManager.Current.Credentials.FirstOrDefault(); if (credential != null) { if (credential.ServiceUri.AbsoluteUri.StartsWith(SecuredPortalUrl)) { // Return the CertificateCredential for the secured portal return(credential); } } // END: workaround try { // Use the X509Store to get a collection of available certificates var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); var certificates = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true); // Prompt the user to select a certificate var selection = X509Certificate2UI.SelectFromCollection(certificates, "Select Certificate", "Select the certificate to use for authentication.", X509SelectionFlag.SingleSelection); // Make sure the user chose one if (selection.Count > 0) { // Create a new CertificateCredential using the chosen certificate credential = new Esri.ArcGISRuntime.Security.CertificateCredential(selection[0]) { ServiceUri = new Uri(SecuredPortalUrl) }; // Add the credential to the authentication manager AuthenticationManager.Current.AddCredential(credential); } } catch (Exception ex) { Debug.WriteLine("Exception: " + ex.Message); } // Return the CertificateCredential for the secured portal return(credential); }
private async Task <Credential> CreateCertCredential(CredentialRequestInfo info) { // Handle challenges for a secured resource by prompting for a client certificate. Credential credential = null; try { // Create an X509 store for reading certificates for the current user. var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); // Open the store in read-only mode. store.Open(OpenFlags.ReadOnly); // Get a list of certificates that are currently valid. X509Certificate2Collection certificates = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true); // Prompt the user to select a certificate using the built-in certificate selection UI. var selection = X509Certificate2UI.SelectFromCollection(certificates, "Select Certificate", "Select the certificate to use for authentication.", X509SelectionFlag.SingleSelection); // Make sure the user chose a certificate. if (selection.Count > 0) { // Create a new CertificateCredential using the chosen certificate. credential = new Esri.ArcGISRuntime.Security.CertificateCredential(selection[0]) { ServiceUri = new Uri(_serverUrl) }; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } // Return the CertificateCredential for the secured portal. return(credential); }