Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
UWP-appar (Universal Windows Platform) som kräver säker autentisering utöver en kombination av användar-ID och lösenord kan använda certifikat för autentisering. Certifikatautentisering ger en hög förtroendenivå när du autentiserar en användare. I vissa fall vill en grupp tjänster autentisera en användare för flera appar. Den här artikeln visar hur du kan autentisera flera appar med samma certifikat och hur du kan tillhandahålla lämplig kod för en användare för att importera ett certifikat som har angetts för åtkomst till skyddade webbtjänster.
Appar kan autentisera till en webbtjänst med hjälp av ett certifikat, och flera appar kan använda ett enda certifikat från certifikatarkivet för att autentisera samma användare. Om ett certifikat saknas i arkivet kan du lägga till kod i appen för att importera ett certifikat från en PFX-fil.
Aktivera Microsoft Internet Information Services (IIS) och mappning av klientcertifikat
Den här artikeln använder Microsoft Internet Information Services (IIS) i exempelsyfte. IIS är inte aktiverat som standard. Du kan aktivera IIS med hjälp av Kontrollpanelen.
- Öppna Kontrollpanelen och välj Program.
- Välj Aktivera eller inaktivera Windows-funktioner.
- Expandera Internet Information Services och expandera sedan World Wide Web Services. Expandera programutvecklingsfunktioner och välj ASP.NET 3,5 och ASP.NET 4,5. Om du gör dessa val aktiveras automatiskt Internet Information Services.
- Klicka på OK för att tillämpa ändringarna.
Skapa och publicera en säker webbtjänst
Kör Microsoft Visual Studio som administratör och välj Nytt projekt från startsidan. Administratörsåtkomst krävs för att publicera en webbtjänst till en IIS-server. I dialogrutan Nytt projekt ändrar du ramverket till .NET Framework 3.5. Välj Visual C# –>Web –>Visual Studio –>ASP.NET Web Service Application. Ge programmet namnet "FirstContosoBank". Klicka på OK för att skapa projektet.
I filen Service1.asmx.cs ersätter du standardmetoden HelloWorld med följande "Login"-metod.
[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(); }Spara filen Service1.asmx.cs.
I Solution Explorerhögerklickar du på appen "FirstContosoBank" och väljer Publicera.
I dialogrutan Publicera webb skapar du en ny profil och ger den namnet "ContosoProfile". Klicka på Nästa.
På nästa sida anger du servernamnet för din IIS-server och anger ett webbplatsnamn för "Standardwebbplats/FirstContosoBank". Klicka på Publicera för att publicera webbtjänsten.
Konfigurera webbtjänsten så att den använder klientcertifikatautentisering
- Kör IIS-hanteraren (Internet Information Services).
- Utöka webbplatserna för din IIS-server. Under Standardwebbplatsväljer du den nya webbtjänsten "FirstContosoBank". I avsnittet Åtgärder väljer du Avancerade inställningar....
- Ange Application Pool till .NET v2.0 och klicka på OK.
- I IIS-hanteraren (Internet Information Services)väljer du din IIS-server och dubbelklickar sedan på servercertifikat. I avsnittet Åtgärder väljer du Skapa Self-Signed certifikat.... Ange "ContosoBank" som eget namn för certifikatet och klicka på OK. Då skapas ett nytt certifikat som ska användas av IIS-servern i form av "<servernamn>.<domännamnet>".
- I IIS-hanteraren (Internet Information Services)väljer du standardwebbplatsen. I avsnittet Åtgärder väljer du Bindning och klickar sedan på Lägg till.... Välj "https" som typ, ange porten till "443" och ange det fullständiga värdnamnet för din IIS-server ("<servernamn>.<domännamn>"). Ange SSL-certifikatet till "ContosoBank". Klicka på OK. Klicka på Stäng i fönstret Webbplatsbindningar.
- I IIS-hanteraren (Internet Information Services)väljer du webbtjänsten "FirstContosoBank". Dubbelklicka på SSL-inställningar. Kontrollera Kräv SSL. Under Klientcertifikat, välj Kräv. I avsnittet Åtgärder klickar du på Använd.
- Du kan kontrollera att webbtjänsten är korrekt konfigurerad genom att öppna webbläsaren och ange följande webbadress: "https://<servernamn>.<domännamn>/FirstContosoBank/Service1.asmx". Till exempel "https://myserver.example.com/FirstContosoBank/Service1.asmx". Om webbtjänsten är korrekt konfigurerad uppmanas du att välja ett klientcertifikat för att få åtkomst till webbtjänsten.
Du kan upprepa föregående steg för att skapa flera webbtjänster som kan nås med samma klientcertifikat.
Skapa en UWP-app som använder certifikatautentisering
Nu när du har en eller flera skyddade webbtjänster kan dina appar använda certifikat för att autentisera till dessa webbtjänster. När du gör en begäran till en autentiserad webbtjänst med hjälp av objektet HttpClient innehåller den första begäran inte något klientcertifikat. Den autentiserade webbtjänsten svarar med en begäran om klientautentisering. När detta inträffar frågar Windows-klienten automatiskt certifikatarkivet efter tillgängliga klientcertifikat. Användaren kan välja mellan dessa certifikat för att autentisera till webbtjänsten. Vissa certifikat är lösenordsskyddade, så du måste ge användaren ett sätt att ange lösenordet för ett certifikat.
Om det inte finns några tillgängliga klientcertifikat måste användaren lägga till ett certifikat i certifikatarkivet. Du kan inkludera kod i din app som gör att en användare kan välja en PFX-fil som innehåller ett klientcertifikat och sedan importera certifikatet till klientcertifikatarkivet.
Tips Du kan använda makecert.exe för att skapa en PFX-fil som ska användas med den här snabbstarten. Information om hur du använder makecert.exefinns i MakeCert.
Öppna Visual Studio och skapa ett nytt projekt från startsidan. Ge det nya projektet namnet "FirstContosoBankApp". Klicka på OK för att skapa det nya projektet.
I filen MainPage.xaml lägger du till följande XAML i standardelementet Grid. Denna XAML innehåller en knapp för att bläddra efter en PFX-fil att importera, en textruta för att ange ett lösenord för en lösenordsskyddad PFX-fil, en knapp för att importera en vald PFX-fil, en knapp för att logga in på den skyddade webbtjänsten och ett textblock för att visa status för den aktuella åtgärden.
<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"/>Spara filen MainPage.xaml.
I filen MainPage.xaml.cs lägger du till följande using-instruktioner.
using Windows.Web.Http; using System.Text; using Windows.Security.Cryptography.Certificates; using Windows.Storage.Pickers; using Windows.Storage; using Windows.Storage.Streams;I filen MainPage.xaml.cs lägger du till följande variabler i klassen MainPage. De anger adressen för den skyddade "Login"-metoden för din "FirstContosoBank"-webbtjänst och en global variabel som innehåller ett PFX-certifikat som ska importeras till certifikatarkivet. Uppdatera <servernamn> till det fullständigt kvalificerade servernamnet för din IIS-server (Microsoft Internet Information Server).
private Uri requestUri = new Uri("https://<server-name>/FirstContosoBank/Service1.asmx?op=Login"); private string pfxCert = null;I filen MainPage.xaml.cs lägger du till följande klickhanterare för inloggningsknappen och metoden för att få åtkomst till den skyddade webbtjänsten.
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(); }I MainPage.xaml.cs-filen lägger du till följande klickhanterare för knappen för att bläddra efter en PFX-fil och knappen för att importera en vald PFX-fil till certifikatarkivet.
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(); }Kör appen och logga in på din skyddade webbtjänst samt importera en PFX-fil till det lokala certifikatarkivet.
Du kan använda de här stegen för att skapa flera appar som använder samma användarcertifikat för att få åtkomst till samma eller olika skyddade webbtjänster.