Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
UWP-apps (Universal Windows Platform) die veilige verificatie vereisen buiten een combinatie van gebruikers-id's en wachtwoorden, kunnen certificaten gebruiken voor verificatie. Certificaatverificatie biedt een hoog vertrouwensniveau bij het verifiëren van een gebruiker. In sommige gevallen wil een groep services een gebruiker verifiëren voor meerdere apps. In dit artikel wordt beschreven hoe u meerdere apps kunt verifiëren met hetzelfde certificaat en hoe u handige code kunt opgeven voor een gebruiker om een certificaat te importeren dat is geleverd voor toegang tot beveiligde webservices.
Apps kunnen worden geverifieerd bij een webservice met behulp van een certificaat en meerdere apps kunnen één certificaat uit het certificaatarchief gebruiken om dezelfde gebruiker te verifiëren. Als er geen certificaat in het archief bestaat, kunt u code toevoegen aan uw app om een certificaat uit een PFX-bestand te importeren.
Microsoft Internet Information Services (IIS) en de toewijzing van clientcertificaten inschakelen
In dit artikel wordt gebruikgemaakt van Microsoft Internet Information Services (IIS) voor voorbeelddoeleinden. IIS is niet standaard ingeschakeld. U kunt IIS inschakelen met behulp van het Configuratiescherm.
- Open het Configuratiescherm en selecteer Programma's.
- Selecteer Windows functies in- of uitschakelen.
- Vouw Internet Information Services uit en vouw vervolgens World Wide Web Services uit. Vouw functies voor toepassingsontwikkeling uit en selecteer ASP.NET 3.5 en ASP.NET 4.5. Als u deze selecties maakt, wordt Internet Information Services automatisch ingeschakeld.
- Klik op OK om de wijzigingen toe te passen.
Een beveiligde webservice maken en publiceren
Voer Microsoft Visual Studio uit als beheerder en selecteer Nieuw project op de startpagina. Beheerderstoegang is vereist voor het publiceren van een webservice naar een IIS-server. Wijzig in het dialoogvenster Nieuw project het framework in .NET Framework 3.5. Selecteer Visual C# ->Web ->Visual Studio ->ASP.NET-webservicetoepassing. Noem de toepassing FirstContosoBank. Klik op OK- om het project te maken.
Vervang in het Service1.asmx.cs bestand de standaard HelloWorld-webmethode door de volgende methode 'Login'.
[WebMethod] public string Login() { // Verify certificate with CA var cert = new System.Security.Cryptography.X509Certificates.X509Certificate2( this.Context.Request.ClientCertificate.Certificate); bool test = cert.Verify(); return test.ToString(); }Sla het Service1.asmx.cs bestand op.
Klik in Solution Explorer met de rechtermuisknop op de app FirstContosoBank en selecteer Publiceren.
Maak in het dialoogvenster Web publiceren een nieuw profiel en geef het de naam ContosoProfile. Klik op Volgende.
Voer op de volgende pagina de servernaam voor uw IIS-server in en geef een sitenaam op van 'Standaardwebsite/FirstContosoBank'. Klik op Publiceren om uw webservice te publiceren.
Uw webservice configureren voor het gebruik van clientcertificaatverificatie
- Voer de IIS-manager (Internet Information Services) uit.
- Vouw de sites voor uw IIS-server uit. Selecteer onder de standaardwebsite de nieuwe webservice FirstContosoBank. Selecteer Geavanceerde instellingen...in de sectie Acties.
- Stel de groep van toepassingen in op .NET v2.0 en klik op OK.
- Selecteer in IIS-beheer (Internet Information Services) uw IIS-server en dubbelklik vervolgens op Servercertificaten. Selecteer in de sectie ActiesSelf-Signed-certificaat maken.... Voer ContosoBank in als de beschrijvende naam voor het certificaat en klik op OK. Hiermee maakt u een nieuw certificaat voor gebruik door de IIS-server in de vorm van '<servernaam>'.<domeinnaam>".
- Selecteer in IIS-beheer (Internet Information Services) de standaardwebsite. Selecteer Binding in de sectie Acties en klik vervolgens op Toevoegen.... Selecteer 'https' als het type, stel de poort in op '443' en voer de volledige hostnaam in voor uw IIS-server (<'servernaam'>.<domeinnaam>"). Stel het SSL-certificaat in op ContosoBank. Klik op OK. Klik op Sluiten in het venster Sitebindingen .
- Selecteer in IIS-beheer (Internet Information Services) de webservice FirstContosoBank. Dubbelklik op SSL-instellingen. Controleer Vereis SSL. Selecteer onder Clientcertificatende optie Vereisen. Klik in de sectie Acties op Toepassen.
- U kunt controleren of de webservice juist is geconfigureerd door uw webbrowser te openen en het volgende webadres in te voeren: 'https://< servernaam>.<domeinnaam>/FirstContosoBank/Service1.asmx". Bijvoorbeeld'https://myserver.example.com/FirstContosoBank/Service1.asmx". Als uw webservice juist is geconfigureerd, wordt u gevraagd om een clientcertificaat te selecteren om toegang te krijgen tot de webservice.
U kunt de vorige stappen herhalen om meerdere webservices te maken die kunnen worden geopend met hetzelfde clientcertificaat.
Een UWP-app maken die gebruikmaakt van certificaatverificatie
Nu u een of meer beveiligde webservices hebt, kunnen uw apps certificaten gebruiken om te verifiëren bij deze webservices. Wanneer u een aanvraag indient bij een geverifieerde webservice met behulp van het HttpClient-object , bevat de eerste aanvraag geen clientcertificaat. De geverifieerde webservice reageert met een aanvraag voor clientverificatie. Wanneer dit gebeurt, voert de Windows-client automatisch een query uit op het certificaatarchief voor beschikbare clientcertificaten. Uw gebruiker kan kiezen uit deze certificaten om te verifiëren bij de webservice. Sommige certificaten zijn beveiligd met een wachtwoord, dus u moet de gebruiker een manier bieden om het wachtwoord voor een certificaat in te voeren.
Als er geen clientcertificaten beschikbaar zijn, moet de gebruiker een certificaat toevoegen aan het certificaatarchief. U kunt code opnemen in uw app waarmee een gebruiker een PFX-bestand kan selecteren dat een clientcertificaat bevat en dat certificaat vervolgens importeert in het clientcertificaatarchief.
Tip U kunt makecert.exe gebruiken om een PFX-bestand te maken voor deze quickstart. Voor meer informatie over het gebruik van makecert.exe, zie MakeCert.
Open Visual Studio en maak een nieuw project vanaf de startpagina. Geef het nieuwe project de naam FirstContosoBankApp. Klik op OK om het nieuwe project te maken.
Voeg in het bestand MainPage.xaml de volgende XAML toe aan het standaard Grid element. Deze XAML bevat een knop om te bladeren naar een PFX-bestand dat u wilt importeren, een tekstvak om een wachtwoord in te voeren voor een PFX-bestand dat met een wachtwoord is beveiligd, een knop om een geselecteerd PFX-bestand te importeren, een knop om u aan te melden bij de beveiligde webservice en een tekstblok om de status van de huidige actie weer te geven.
<Button x:Name="Import" Content="Import Certificate (PFX file)" HorizontalAlignment="Left" Margin="352,305,0,0" VerticalAlignment="Top" Height="77" Width="260" Click="Import_Click" FontSize="16"/> <Button x:Name="Login" Content="Login" HorizontalAlignment="Left" Margin="611,305,0,0" VerticalAlignment="Top" Height="75" Width="240" Click="Login_Click" FontSize="16"/> <TextBlock x:Name="Result" HorizontalAlignment="Left" Margin="355,398,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="153" Width="560"/> <PasswordBox x:Name="PfxPassword" HorizontalAlignment="Left" Margin="483,271,0,0" VerticalAlignment="Top" Width="229"/> <TextBlock HorizontalAlignment="Left" Margin="355,271,0,0" TextWrapping="Wrap" Text="PFX password" VerticalAlignment="Top" FontSize="18" Height="32" Width="123"/> <Button x:Name="Browse" Content="Browse for PFX file" HorizontalAlignment="Left" Margin="352,189,0,0" VerticalAlignment="Top" Click="Browse_Click" Width="499" Height="68" FontSize="16"/> <TextBlock HorizontalAlignment="Left" Margin="717,271,0,0" TextWrapping="Wrap" Text="(Optional)" VerticalAlignment="Top" Height="32" Width="83" FontSize="16"/>Sla het bestand MainPage.xaml op.
Voeg in het bestand MainPage.xaml.cs het volgende toe met behulp van instructies.
using Windows.Web.Http; using System.Text; using Windows.Security.Cryptography.Certificates; using Windows.Storage.Pickers; using Windows.Storage; using Windows.Storage.Streams;Voeg in het bestand MainPage.xaml.cs de volgende variabelen toe aan de klasse MainPage . Ze geven het adres op voor de beveiligde 'Login'-methode van uw 'FirstContosoBank'-webservice en een globale variabele die een PFX-certificaat bevat dat in het certificaatarchief moet worden geïmporteerd. Werk de <servernaam> bij naar de volledig gekwalificeerde servernaam voor uw IIS-server (Microsoft Internet Information Server).
private Uri requestUri = new Uri("https://<server-name>/FirstContosoBank/Service1.asmx?op=Login"); private string pfxCert = null;Voeg in het MainPage.xaml.cs bestand de volgende klikhandler toe voor de aanmeldingsknop en methode voor toegang tot de beveiligde webservice.
private void Login_Click(object sender, RoutedEventArgs e) { MakeHttpsCall(); } private async void MakeHttpsCall() { StringBuilder result = new StringBuilder("Login "); HttpResponseMessage response; try { Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient(); response = await httpClient.GetAsync(requestUri); if (response.StatusCode == HttpStatusCode.Ok) { result.Append("successful"); } else { result = result.Append("failed with "); result = result.Append(response.StatusCode); } } catch (Exception ex) { result = result.Append("failed with "); result = result.Append(ex.Message); } Result.Text = result.ToString(); }Voeg in het MainPage.xaml.cs-bestand de volgende klikhandlers toe voor de knop om naar een PFX-bestand te bladeren en de knop om een geselecteerd PFX-bestand te importeren in het certificaatarchief.
private async void Import_Click(object sender, RoutedEventArgs e) { try { Result.Text = "Importing selected certificate into user certificate store...."; await CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync( pfxCert, PfxPassword.Password, ExportOption.Exportable, KeyProtectionLevel.NoConsent, InstallOptions.DeleteExpired, "Import Pfx"); Result.Text = "Certificate import succeeded"; } catch (Exception ex) { Result.Text = "Certificate import failed with " + ex.Message; } } private async void Browse_Click(object sender, RoutedEventArgs e) { StringBuilder result = new StringBuilder("Pfx file selection "); FileOpenPicker pfxFilePicker = new FileOpenPicker(); pfxFilePicker.FileTypeFilter.Add(".pfx"); pfxFilePicker.CommitButtonText = "Open"; try { StorageFile pfxFile = await pfxFilePicker.PickSingleFileAsync(); if (pfxFile != null) { IBuffer buffer = await FileIO.ReadBufferAsync(pfxFile); using (DataReader dataReader = DataReader.FromBuffer(buffer)) { byte[] bytes = new byte[buffer.Length]; dataReader.ReadBytes(bytes); pfxCert = System.Convert.ToBase64String(bytes); PfxPassword.Password = string.Empty; result.Append("succeeded"); } } else { result.Append("failed"); } } catch (Exception ex) { result.Append("failed with "); result.Append(ex.Message); ; } Result.Text = result.ToString(); }Voer uw app uit en meld u aan bij uw beveiligde webservice en importeer een PFX-bestand in het lokale certificaatarchief.
U kunt deze stappen gebruiken om meerdere apps te maken die hetzelfde gebruikerscertificaat gebruiken voor toegang tot dezelfde of verschillende beveiligde webservices.