Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les applications de plateforme Windows universelle (UWP) qui nécessitent une authentification sécurisée au-delà d’une combinaison d’ID d’utilisateur et de mot de passe peuvent utiliser des certificats pour l’authentification. L’authentification par certificat fournit un niveau de confiance élevé lors de l’authentification d’un utilisateur. Dans certains cas, un groupe de services souhaite authentifier un utilisateur pour plusieurs applications. Cet article explique comment authentifier plusieurs applications à l’aide du même certificat et comment vous pouvez fournir du code pratique pour qu’un utilisateur importe un certificat fourni pour accéder aux services web sécurisés.
Les applications peuvent s’authentifier auprès d’un service web à l’aide d’un certificat, et plusieurs applications peuvent utiliser un certificat unique à partir du magasin de certificats pour authentifier le même utilisateur. Si un certificat n’existe pas dans le magasin, vous pouvez ajouter du code à votre application pour importer un certificat à partir d’un fichier PFX.
Activer le mappage de certificat client et IIS (Microsoft Internet Information Services)
Cet article utilise Microsoft Internet Information Services (IIS) à des fins d’exemple. IIS n’est pas activé par défaut. Vous pouvez activer IIS à l’aide du Panneau de configuration.
- Ouvrez le Panneau de configuration et sélectionnez Programmes.
- Sélectionnez Activer ou désactiver les fonctionnalités de Windows.
- Développez internet Information Services, puis développez World Wide Web Services. Développez les fonctionnalités de développement d’applications, puis sélectionnez ASP.NET 3.5 et ASP.NET 4.5. La création de ces sélections active automatiquement Internet Information Services.
- Cliquez sur OK pour appliquer les modifications.
Créer et publier un service web sécurisé
Exécutez Microsoft Visual Studio en tant qu’administrateur et sélectionnez nouveau projet dans la page de démarrage. L’accès administrateur est requis pour publier un service web sur un serveur IIS. Dans la boîte de dialogue Nouveau projet, changez le Framework en .NET Framework 3.5. Sélectionnez Visual C# ->web ->Visual Studio ->ASP.NET application de service web. Nommez l’application « FirstContosoBank ». Cliquez sur OK pour créer le projet.
Dans le fichier Service1.asmx.cs, remplacez la méthode web par défaut HelloWorld par la méthode « Login » suivante.
[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(); }Enregistrez le fichier Service1.asmx.cs.
Dans l’Explorateur de solutions , cliquez avec le bouton droit sur l’application « FirstContosoBank », puis sélectionnez Publier.
Dans la boîte de dialogue Publier sur le Web, créez un nouveau profil et nommez-le « ContosoProfile ». Cliquez sur Suivant.
Dans la page suivante, entrez le nom du serveur IIS et spécifiez le nom du site « Site web par défaut/FirstContosoBank ». Cliquez sur Publier pour publier votre service Web.
Configurer votre service web pour utiliser l’authentification par certificat client
- Exécutez le gestionnaire des services Internet (IIS) .
- Développez les sites de votre serveur IIS. Sous le site web par défaut, sélectionnez le nouveau service web « FirstContosoBank ». Dans la section Actions, sélectionnez Paramètres avancés....
- Définissez le pool d'applications sur .NET v2.0, puis cliquez sur OK.
- Dans le Gestionnaire des services Internet (IIS), sélectionnez votre serveur IIS
, puis double-cliquez sur Certificats de serveur . Dans la section Actions, sélectionnez Créer un certificat Self-Signed.... Entrez « ContosoBank » comme nom convivial pour le certificat, puis cliquez sur OK. Cela crée un certificat à utiliser par le serveur IIS sous la forme «<nom de serveur>.<nom de domaine>». - Dans legestionnaire des services Internet (IIS)
, sélectionnez le site web par défaut. Dans la section Actions, sélectionnez Binding, puis cliquez sur Ajouter.... Sélectionnez « https » comme type, définissez le port sur « 443 », puis entrez le nom d'hôte complet de votre serveur IIS («<nom de serveur>.<nom de domaine>»). Définissez le certificat SSL sur « ContosoBank ». Cliquez sur OK. Cliquez sur Fermer dans la fenêtre liaisons de site. - Dans le Gestionnaire des services Internet (IIS), sélectionnez le service web « FirstContosoBank ». Double-cliquez deux fois sur Paramètres SSL. Vérifiez exiger uneSSL. Sous certificats clients, sélectionnez Exiger. Dans la section Actions, cliquez sur Appliquer.
- Vous pouvez vérifier que le service web est configuré correctement en ouvrant votre navigateur web et en entrant l’adresse web suivante : « https://<nom du serveur>.<nom de domaine>/FirstContosoBank/Service1.asmx ». Par exemple, «https://myserver.example.com/FirstContosoBank/Service1.asmx". Si votre service web est configuré correctement, vous serez invité à sélectionner un certificat client pour accéder au service web.
Vous pouvez répéter les étapes précédentes pour créer plusieurs services web accessibles à l’aide du même certificat client.
Créer une application UWP qui utilise l’authentification par certificat
Maintenant que vous disposez d’un ou plusieurs services web sécurisés, vos applications peuvent utiliser des certificats pour s’authentifier auprès de ces services web. Lorsque vous effectuez une demande à un service web authentifié à l’aide de l’objet HttpClient, la requête initiale ne contient pas de certificat client. Le service web authentifié répond avec une demande d’authentification du client. Lorsque cela se produit, le client Windows interroge automatiquement le magasin de certificats pour les certificats clients disponibles. Votre utilisateur peut sélectionner parmi ces certificats pour s’authentifier auprès du service web. Certains certificats sont protégés par mot de passe. Vous devez donc fournir à l’utilisateur un moyen d’entrer le mot de passe d’un certificat.
S’il n’existe aucun certificat client disponible, l’utilisateur doit ajouter un certificat au magasin de certificats. Vous pouvez inclure du code dans votre application qui permet à un utilisateur de sélectionner un fichier PFX qui contient un certificat client, puis d’importer ce certificat dans le magasin de certificats client.
conseil Vous pouvez utiliser makecert.exe pour créer un fichier PFX à utiliser avec ce guide de démarrage rapide. Pour plus d’informations sur l’utilisation de makecert.exe, consultez MakeCert.
Ouvrez Visual Studio et créez un projet à partir de la page de démarrage. Nommez le nouveau projet « FirstContosoBankApp ». Cliquez sur OK pour créer le projet.
Dans le fichier MainPage.xaml, ajoutez le code XAML suivant à l’élément Grid par défaut. Ce code XAML inclut un bouton permettant de rechercher un fichier PFX à importer, une zone de texte pour entrer un mot de passe pour un fichier PFX protégé par mot de passe, un bouton permettant d’importer un fichier PFX sélectionné, un bouton permettant de se connecter au service web sécurisé et un bloc de texte pour afficher l’état de l’action actuelle.
<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"/>Enregistrez le fichier MainPage.xaml.
Dans le fichier MainPage.xaml.cs, ajoutez les instructions using suivantes.
using Windows.Web.Http; using System.Text; using Windows.Security.Cryptography.Certificates; using Windows.Storage.Pickers; using Windows.Storage; using Windows.Storage.Streams;Dans le fichier MainPage.xaml.cs, ajoutez les variables suivantes à la classe MainPage. Ils spécifient l’adresse de la méthode « Login » sécurisée de votre service web « FirstContosoBank » et une variable globale qui contient un certificat PFX à importer dans le magasin de certificats. Mettez à jour le nom du serveur <> vers le nom de serveur entièrement qualifié pour votre serveur Microsoft Internet Information Server (IIS).
private Uri requestUri = new Uri("https://<server-name>/FirstContosoBank/Service1.asmx?op=Login"); private string pfxCert = null;Dans le fichier MainPage.xaml.cs, ajoutez le gestionnaire de clics suivant pour le bouton de connexion et la méthode permettant d’accéder au service web sécurisé.
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(); }Dans le fichier MainPage.xaml.cs, ajoutez les gestionnaires de clics suivants pour le bouton pour rechercher un fichier PFX et le bouton pour importer un fichier PFX sélectionné dans le magasin de certificats.
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(); }Exécutez votre application, connectez-vous à votre service web sécurisé et importez un fichier PFX dans le magasin de certificats local.
Vous pouvez utiliser ces étapes pour créer plusieurs applications qui utilisent le même certificat d’utilisateur pour accéder au même ou à différents services web sécurisés.