Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje platformy uniwersalnej systemu Windows (UWP), które wymagają bezpiecznego uwierzytelniania poza identyfikatorem użytkownika i kombinacją hasła, mogą używać certyfikatów do uwierzytelniania. Uwierzytelnianie certyfikatu zapewnia wysoki poziom zaufania podczas uwierzytelniania użytkownika. W niektórych przypadkach grupa usług będzie chciała uwierzytelnić użytkownika dla wielu aplikacji. W tym artykule pokazano, jak można uwierzytelnić wiele aplikacji przy użyciu tego samego certyfikatu i jak można zapewnić wygodny kod dla użytkownika w celu zaimportowania certyfikatu udostępnionego w celu uzyskania dostępu do zabezpieczonych usług sieci Web.
Aplikacje mogą uwierzytelniać się w usłudze internetowej przy użyciu certyfikatu, a wiele aplikacji może używać jednego certyfikatu z magazynu certyfikatów w celu uwierzytelnienia tego samego użytkownika. Jeśli certyfikat nie istnieje w sklepie, możesz dodać kod do aplikacji, aby zaimportować certyfikat z pliku PFX.
Włącz Microsoft Internet Information Services (IIS) i mapowanie certyfikatów klienta
W tym artykule użyto na przykład usług Microsoft Internet Information Services (IIS). Usługi IIS nie są domyślnie włączone. Usługi IIS można włączyć za pomocą Panelu sterowania.
- Otwórz Panel sterowania i wybierz pozycję programy .
- Wybierz pozycję Włącz lub wyłącz funkcje systemu Windows.
- Rozwiń węzeł Internet Information Services, a następnie rozwiń węzeł World Wide Web Services. Rozwiń funkcje tworzenia aplikacji i wybierz pozycję ASP.NET 3.5 i ASP.NET 4.5. Wybranie tych opcji spowoduje automatyczne włączenie Usług informacyjnych Internetu.
- Kliknij przycisk OK , aby zastosować zmiany.
Tworzenie i publikowanie zabezpieczonej usługi internetowej
Uruchom program Microsoft Visual Studio jako administrator i wybierz pozycję Nowy projekt na stronie początkowej. Dostęp administratora jest wymagany do publikowania usługi internetowej na serwerze usług IIS. W oknie dialogowym Nowy projekt zmień strukturę na .NET Framework 3.5. Wybierz pozycję Visual C# ->Web ->Visual Studio ->Aplikacja usługi internetowej ASP.NET. Nadaj aplikacji nazwę "FirstContosoBank". Kliknij przycisk OK, aby utworzyć projekt.
W pliku Service1.asmx.cs zastąp domyślną metodę internetową HelloWorld następującą metodą "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(); }Zapisz plik Service1.asmx.cs .
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy aplikację "FirstContosoBank", a następnie wybierz pozycję Publikuj.
W oknie dialogowym Publikowanie sieci Web utwórz nowy profil i nadaj mu nazwę "ContosoProfile". Kliknij przycisk Dalej.
Na następnej stronie wprowadź nazwę serwera usług IIS i określ nazwę witryny "Domyślna witryna sieci Web/FirstContosoBank". Kliknij Opublikuj, aby umieścić swoją usługę internetową.
Konfigurowanie usługi internetowej do korzystania z uwierzytelniania certyfikatu klienta
- Uruchom Menedżera Internet Information Services (IIS) .
- Rozwiń witryny serwera usług IIS. W obszarze domyślna witryna sieci Webwybierz nową usługę internetową "FirstContosoBank". W sekcji Actions wybierz pozycję Advanced Settings....
- Ustaw puli aplikacji
na .NET w wersji 2.0 i kliknij przyciskOK . - W menedżerze Internet Information Services (IIS)wybierz serwer usług IIS, a następnie kliknij dwukrotnie Certyfikaty Serwera. W sekcji Akcje wybierz pozycję Utwórz certyfikat... Self-Signed. Wprowadź "ContosoBank" jako nazwę certyfikatu i kliknij przycisk OK. Spowoduje to utworzenie nowego certyfikatu do użycia przez serwer usług IIS w postaci "<nazwa-serwera>.<nazwa-domeny>".
- W Menedżerze usług Internet Information Services (IIS) wybierz domyślną witrynę sieci Web. W sekcji Akcje wybierz Powiązanie, po czym kliknij Dodaj.... Wybierz "https" jako typ, ustaw port na "443", a następnie wprowadź pełną nazwę hosta dla swojego serwera IIS ("<nazwa-serwera>.<nazwa-domeny>"). Ustaw certyfikat SSL na "ContosoBank". Kliknij przycisk OK. Kliknij przycisk Zamknij w oknie Powiązania lokacji.
- W menedżerze Internet Information Services (IIS)wybierz serwis internetowy "FirstContosoBank". Kliknij dwukrotnie ustawienia protokołu SSL. Sprawdź Wymagaj SSL. W sekcji „Certyfikaty klienta” wybierz pozycję „Wymagaj” . W sekcji
Actions kliknijApply (Zastosuj). - Możesz sprawdzić, czy usługa internetowa jest poprawnie skonfigurowana, otwierając przeglądarkę internetową i wprowadzając następujący adres internetowy: "https://< server-name>.<nazwa-domeny>/FirstContosoBank/Service1.asmx". Na przykład "https://myserver.example.com/FirstContosoBank/Service1.asmx". Jeśli usługa internetowa jest poprawnie skonfigurowana, zostanie wyświetlony monit o wybranie certyfikatu klienta w celu uzyskania dostępu do usługi internetowej.
Możesz powtórzyć poprzednie kroki, aby utworzyć wiele usług internetowych, do których można uzyskać dostęp przy użyciu tego samego certyfikatu klienta.
Utwórz aplikację platformy uniwersalnej Windows wykorzystującą uwierzytelnianie certyfikatem
Teraz, gdy masz co najmniej jedną zabezpieczoną usługę internetową, aplikacje mogą używać certyfikatów do uwierzytelniania w tych usługach internetowych. Po wysłaniu żądania do uwierzytelnionej usługi internetowej przy użyciu obiektu HttpClient początkowe żądanie nie będzie zawierać certyfikatu klienta. Uwierzytelniona usługa internetowa odpowie żądaniem uwierzytelnienia klienta. W takim przypadku klient systemu Windows automatycznie odpytuje magazyn certyfikatów pod kątem dostępnych certyfikatów klienta. Użytkownik może wybrać spośród tych certyfikatów, aby uwierzytelnić się w usłudze internetowej. Niektóre certyfikaty są chronione hasłem, dlatego należy podać użytkownikowi sposób wprowadzania hasła dla certyfikatu.
Jeśli nie ma dostępnych certyfikatów klienta, użytkownik będzie musiał dodać certyfikat do magazynu certyfikatów. Możesz dołączyć kod w aplikacji, który umożliwia użytkownikowi wybranie pliku PFX zawierającego certyfikat klienta, a następnie zaimportowanie tego certyfikatu do magazynu certyfikatów klienta.
Porada Możesz użyć makecert.exe do utworzenia pliku PFX, którego można użyć z tym szybkim startem. Aby uzyskać informacje na temat używania makecert.exe, zobacz MakeCert.
Otwórz program Visual Studio i utwórz nowy projekt na stronie początkowej. Nazwij nowy projekt "FirstContosoBankApp". Kliknij przycisk OK , aby utworzyć nowy projekt.
W pliku MainPage.xaml dodaj następujący kod XAML do domyślnego elementu Grid . Ten kod XAML zawiera przycisk umożliwiający przeglądanie pliku PFX do zaimportowania, pole tekstowe umożliwiające wprowadzenie hasła do pliku PFX chronionego hasłem, przycisk importowania wybranego pliku PFX, przycisk do logowania się do zabezpieczonej usługi internetowej oraz blok tekstowy w celu wyświetlenia stanu bieżącej akcji.
<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"/>Zapisz plik MainPage.xaml.
W pliku MainPage.xaml.cs dodaj następujące instrukcje using.
using Windows.Web.Http; using System.Text; using Windows.Security.Cryptography.Certificates; using Windows.Storage.Pickers; using Windows.Storage; using Windows.Storage.Streams;W pliku MainPage.xaml.cs dodaj następujące zmienne do klasy MainPage . Określają adres zabezpieczonej metody "Login" usługi internetowej "FirstContosoBank" oraz zmienną globalną, która zawiera certyfikat PFX do zaimportowania do magazynu certyfikatów. Zaktualizuj <nazwę serwera> na w pełni kwalifikowaną nazwę serwera dla serwera Microsoft Internet Information Services (IIS).
private Uri requestUri = new Uri("https://<server-name>/FirstContosoBank/Service1.asmx?op=Login"); private string pfxCert = null;W pliku MainPage.xaml.cs dodaj następującą procedurę obsługi kliknięć dla przycisku logowania i metody uzyskiwania dostępu do zabezpieczonej usługi internetowej.
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(); }W pliku MainPage.xaml.cs dodaj następujące programy obsługi kliknięć dla tego przycisku, aby wyszukać plik PFX i przycisk importowania wybranego pliku PFX do magazynu certyfikatów.
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(); }Uruchom aplikację i zaloguj się do zabezpieczonej usługi internetowej, a także zaimportuj plik PFX do lokalnego magazynu certyfikatów.
Te kroki umożliwiają utworzenie wielu aplikacji korzystających z tego samego certyfikatu użytkownika w celu uzyskania dostępu do tych samych lub różnych zabezpieczonych usług sieci Web.