

La AWS SDK pour .NET V3 est passée en mode maintenance.

Nous vous recommandons de migrer vers la version [AWS SDK pour .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Pour plus de détails et d'informations sur la façon de migrer, veuillez consulter notre [annonce relative au mode de maintenance](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel pour l'authentification unique utilisant uniquement des applications .NET
<a name="sso-tutorial-app-only"></a>

Ce didacticiel explique comment activer l'authentification unique pour une application de base et pour un utilisateur d'authentification unique de test. [Il configure l'application pour générer un jeton SSO temporaire par programmation au lieu d'utiliser le. AWS CLI](sso-tutorial-cli-and-app.md)

Ce didacticiel présente une petite partie des fonctionnalités SSO du AWS SDK pour .NET. Pour plus de détails sur l'utilisation d'IAM Identity Center avec le AWS SDK pour .NET, consultez la rubrique contenant des [informations générales](sso.md). Dans cette rubrique, consultez en particulier la description détaillée de ce scénario dans la sous-section intitulée[Application .NET uniquement](sso.md#sso-generate-use-token-app-only-summary).

**Note**  
Plusieurs étapes de ce didacticiel vous aident à configurer des services tels que AWS Organizations IAM Identity Center. Si vous avez déjà effectué cette configuration, ou si vous êtes uniquement intéressé par le code, vous pouvez passer à la section contenant l'[exemple de code](#sso-tutorial-app-only-code).

## Conditions préalables
<a name="sso-tutorial-app-only-prereq"></a>
+ Configurez votre environnement de développement si ce n'est pas déjà fait. Ceci est décrit dans les sections telles que [Installez et configurez votre chaîne d'outils](net-dg-dev-env.md) et[Mise en route](net-dg-config.md).
+ Identifiez ou créez-en au moins un Compte AWS que vous pouvez utiliser pour tester l'authentification unique. Dans le cadre de ce didacticiel, cela s'appelle le compte de *test Compte AWS* ou simplement le *compte de test*.
+ Identifiez un *utilisateur SSO* qui peut tester le SSO pour vous. Il s'agit d'une personne qui utilisera le SSO et les applications de base que vous créez. Pour ce didacticiel, cette personne peut être vous (le développeur) ou quelqu'un d'autre. Nous recommandons également une configuration dans laquelle l'utilisateur SSO travaille sur un ordinateur qui ne se trouve pas dans votre environnement de développement. Cependant, cela n'est pas strictement nécessaire.
+ L'ordinateur de l'utilisateur SSO doit disposer d'un framework .NET compatible avec celui que vous avez utilisé pour configurer votre environnement de développement.

## Configurez AWS
<a name="sso-tutorial-app-only-setup-aws"></a>

Cette section explique comment configurer différents AWS services pour ce didacticiel.

Pour effectuer cette configuration, connectez-vous d'abord au test en Compte AWS tant qu'administrateur. Ensuite, procédez comme suit :

### Amazon S3
<a name="w2aac13b7c39c15b3b5"></a>

Accédez à la [console Amazon S3](https://console.aws.amazon.com/s3/home) et ajoutez des compartiments inoffensifs. Plus loin dans ce didacticiel, l'utilisateur SSO récupérera une liste de ces buckets.

### AWS IAM
<a name="w2aac13b7c39c15b3b7"></a>

Accédez à la [console IAM](https://console.aws.amazon.com/iam/home#/users) et ajoutez quelques utilisateurs IAM. Si vous accordez des autorisations aux utilisateurs IAM, limitez les autorisations à quelques autorisations inoffensives en lecture seule. Plus loin dans ce didacticiel, l'utilisateur SSO récupérera une liste de ces utilisateurs IAM.

### AWS Organizations
<a name="w2aac13b7c39c15b3b9"></a>

Accédez à la [AWS Organizations console](https://console.aws.amazon.com/organizations/) et activez Organizations. Pour plus d’informations, consultez [Création d’une organisation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html) dans le [AWS Organizations Guide de l’utilisateur](https://docs.aws.amazon.com/organizations/latest/userguide/).

Cette action ajoute le test Compte AWS à l'organisation en tant que *compte de gestion*. Si vous avez des comptes de test supplémentaires, vous pouvez les inviter à rejoindre l'organisation, mais cela n'est pas nécessaire pour ce didacticiel.

### IAM Identity Center
<a name="w2aac13b7c39c15b3c11"></a>

Accédez à la [console IAM Identity Center](https://console.aws.amazon.com/singlesignon/) et activez l'authentification unique. Effectuez la vérification des e-mails si nécessaire. Pour plus d'informations, consultez la section [Activer le centre d'identité IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/step1.html) dans le guide de l'[utilisateur d'IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/).

Effectuez ensuite la configuration suivante.

#### Configuration du centre d'identité IAM
<a name="w2aac13b7c39c15b3c11b7b1"></a>

1. Accédez à la page **des paramètres**. Recherchez **« l'URL du portail d'accès »** et enregistrez la valeur pour une utilisation ultérieure dans le `sso_start_url` paramètre.

1. Dans le bandeau du AWS Management Console, recherchez Région AWS celui qui a été défini lorsque vous avez activé l'authentification unique. Il s'agit du menu déroulant situé à gauche de l' Compte AWS identifiant. Enregistrez le code de région pour une utilisation ultérieure dans le `sso_region` réglage. Ce code sera similaire à`us-east-1`.

1. Créez un utilisateur SSO comme suit :

   1. Accédez à la page **Utilisateurs**.

   1. **Choisissez **Ajouter un utilisateur** et entrez le **nom** d'utilisateur, l'**adresse e-mail**, le **prénom et le nom** de famille de l'utilisateur.** Ensuite, choisissez **Suivant**.

   1. Choisissez **Suivant** sur la page des groupes, puis passez en revue les informations et choisissez **Ajouter un utilisateur**.

1. Créez un groupe comme suit :

   1. Accédez à la page **Groupes**.

   1. Choisissez **Créer un groupe** et entrez le **nom et la **description** du groupe**.

   1. Dans la section **Ajouter des utilisateurs au groupe**, sélectionnez l'utilisateur SSO de test que vous avez créé précédemment. Sélectionnez ensuite **Créer un groupe.**

1. Créez un ensemble d'autorisations comme suit :

   1. Accédez à la page **Ensembles d'autorisations** et choisissez **Créer un ensemble d'autorisations**.

   1. Sous **Type d'ensemble d'autorisations**, sélectionnez **Ensemble d'autorisations personnalisé**, puis cliquez sur **Suivant**.

   1. Ouvrez **Inline policy** et entrez la politique suivante :

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "s3:ListAllMyBuckets",
                      "iam:ListUsers"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. Pour ce didacticiel, entrez le `SSOReadOnlyRole` **nom du jeu d'autorisations**. Ajoutez une **description** si vous le souhaitez, puis choisissez **Next**.

   1. Passez en revue les informations, puis choisissez **Créer**.

   1. Enregistrez le nom de l'ensemble d'autorisations pour une utilisation ultérieure dans le `sso_role_name` paramètre.

1. Accédez à la page **AWS des comptes** et choisissez le AWS compte que vous avez ajouté à l'organisation plus tôt.

1. Dans la section **Aperçu** de cette page, recherchez l'**identifiant du compte** et enregistrez-le pour une utilisation ultérieure dans le `sso_account_id` paramètre.

1. Choisissez l'onglet **Utilisateurs et groupes**, puis choisissez **Attribuer des utilisateurs ou des groupes**.

1. Sur la page **Attribuer des utilisateurs et des** **groupes, choisissez l'onglet Groupes**, sélectionnez le groupe que vous avez créé précédemment, puis cliquez sur **Suivant**.

1. Sélectionnez l'ensemble d'autorisations que vous avez créé précédemment et choisissez **Suivant**, puis **Soumettre**. La configuration prend quelques instants.

## Création d'exemples d'applications
<a name="sso-tutorial-app-only-code"></a>

Créez les applications suivantes. Ils seront exécutés sur l'ordinateur de l'utilisateur SSO.

### Répertorier les compartiments Amazon S3
<a name="sso-tutorial-app-only-code-s3"></a>

Incluez `AWSSDK.SSO` les NuGet packages et `AWSSDK.SSOOIDC` en plus de `AWSSDK.S3` et`AWSSDK.SecurityToken`.

```
using System;
using System.Threading.Tasks;
using System.Diagnostics;


// NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC
using Amazon.Runtime;
using Amazon.Runtime.CredentialManagement;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;

namespace SSOExample.S3.Programmatic_login
{
    class Program
    {
        // Requirements:
        // - An SSO profile in the SSO user's shared config file.

        // Class members.
        private static string profile = "my-sso-profile";

        static async Task Main(string[] args)
        {
            // Get SSO credentials from the information in the shared config file.
            var ssoCreds = LoadSsoCredentials(profile);

            // Display the caller's identity.
            var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds);
            Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}");

            // Display a list of the account's S3 buckets.
            // The S3 client is created using the SSO credentials obtained earlier.
            var s3Client = new AmazonS3Client(ssoCreds);
            Console.WriteLine("\nGetting a list of your buckets...");
            var listResponse = await s3Client.ListBucketsAsync();
            Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}");
            foreach (S3Bucket b in listResponse.Buckets)
            {
                Console.WriteLine(b.BucketName);
            }
            Console.WriteLine();
        }

        // Method to get SSO credentials from the information in the shared config file.
        static AWSCredentials LoadSsoCredentials(string profile)
        {
            var chain = new CredentialProfileStoreChain();
            if (!chain.TryGetAWSCredentials(profile, out var credentials))
                throw new Exception($"Failed to find the {profile} profile");

            var ssoCredentials = credentials as SSOAWSCredentials;

            ssoCredentials.Options.ClientName = "Example-SSO-App";
            ssoCredentials.Options.SsoVerificationCallback = args =>
            {
                // Launch a browser window that prompts the SSO user to complete an SSO login.
                //  This method is only invoked if the session doesn't already have a valid SSO token.
                // NOTE: Process.Start might not support launching a browser on macOS or Linux. If not,
                //       use an appropriate mechanism on those systems instead.
                Process.Start(new ProcessStartInfo
                {
                    FileName = args.VerificationUriComplete,
                    UseShellExecute = true
                });
            };

            return ssoCredentials;
        }

    }

    // Class to read the caller's identity.
    public static class Extensions
    {
        public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient)
        {
            var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest());
            return response.Arn;
        }
    }
}
```

### Répertorier les utilisateurs IAM
<a name="sso-tutorial-app-only-code-iam"></a>

Incluez `AWSSDK.SSO` les NuGet packages et `AWSSDK.SSOOIDC` en plus de `AWSSDK.IdentityManagement` et`AWSSDK.SecurityToken`.

```
using System;
using System.Threading.Tasks;
using System.Diagnostics;


// NuGet packages: AWSSDK.IdentityManagement, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC
using Amazon.Runtime;
using Amazon.Runtime.CredentialManagement;
using Amazon.IdentityManagement;
using Amazon.IdentityManagement.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;

namespace SSOExample.IAM.Programmatic_login
{
    class Program
    {
        // Requirements:
        // - An SSO profile in the SSO user's shared config file.

        // Class members.
        private static string profile = "my-sso-profile";

        static async Task Main(string[] args)
        {
            // Get SSO credentials from the information in the shared config file.
            var ssoCreds = LoadSsoCredentials(profile);

            // Display the caller's identity.
            var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds);
            Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}");

            // Display a list of the account's IAM users.
            // The IAM client is created using the SSO credentials obtained earlier.
            var iamClient = new AmazonIdentityManagementServiceClient(ssoCreds);
            Console.WriteLine("\nGetting a list of IAM users...");
            var listResponse = await iamClient.ListUsersAsync();
            Console.WriteLine($"Number of IAM users: {listResponse.Users.Count}");
            foreach (User u in listResponse.Users)
            {
                Console.WriteLine(u.UserName);
            }
            Console.WriteLine();
        }

        // Method to get SSO credentials from the information in the shared config file.
        static AWSCredentials LoadSsoCredentials(string profile)
        {
            var chain = new CredentialProfileStoreChain();
            if (!chain.TryGetAWSCredentials(profile, out var credentials))
                throw new Exception($"Failed to find the {profile} profile");

            var ssoCredentials = credentials as SSOAWSCredentials;

            ssoCredentials.Options.ClientName = "Example-SSO-App";
            ssoCredentials.Options.SsoVerificationCallback = args =>
            {
                // Launch a browser window that prompts the SSO user to complete an SSO login.
                //  This method is only invoked if the session doesn't already have a valid SSO token.
                // NOTE: Process.Start might not support launching a browser on macOS or Linux. If not,
                //       use an appropriate mechanism on those systems instead.
                Process.Start(new ProcessStartInfo
                {
                    FileName = args.VerificationUriComplete,
                    UseShellExecute = true
                });
            };

            return ssoCredentials;
        }

    }

    // Class to read the caller's identity.
    public static class Extensions
    {
        public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient)
        {
            var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest());
            return response.Arn;
        }
    }
}
```

En plus d'afficher des listes de buckets Amazon S3 et d'utilisateurs IAM, ces applications affichent l'ARN d'identité utilisateur pour le profil compatible SSO, décrit dans ce didacticiel. `my-sso-profile`

Ces applications exécutent des tâches de connexion SSO en fournissant une méthode de rappel dans la propriété [Options d'](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSSOAWSCredentialsOptions.html)un objet. [SSOAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSSOAWSCredentials.html)

## Instruire l'utilisateur SSO
<a name="sso-tutorial-app-only-user"></a>

Demandez à l'utilisateur SSO de vérifier ses e-mails et d'accepter l'invitation SSO. Ils sont invités à définir un mot de passe. Le message peut prendre quelques minutes pour arriver dans la boîte de réception de l'utilisateur SSO.

Fournissez à l'utilisateur SSO les applications que vous avez créées précédemment.

Demandez ensuite à l'utilisateur SSO d'effectuer les opérations suivantes :

1. Si le dossier contenant le AWS `config` fichier partagé n'existe pas, créez-le. Si le dossier existe et qu'un sous-dossier est appelé`.sso`, supprimez-le.

   L'emplacement de ce dossier est généralement `%USERPROFILE%\.aws` sous Windows, Linux et macOS. `~/.aws`

1. Créez un AWS `config` fichier partagé dans ce dossier, si nécessaire, et ajoutez-y un profil comme suit :

   ```
   [default]
   region = <default Region>
   
   [profile my-sso-profile]
   sso_start_url = <user portal URL recorded earlier>
   sso_region = <Region code recorded earlier>
   sso_account_id = <account ID recorded earlier>
   sso_role_name = SSOReadOnlyRole
   ```

1. Exécutez l'application Amazon S3.

1. Sur la page de connexion Web qui s'affiche, connectez-vous. Utilisez le nom d'utilisateur indiqué dans le message d'invitation et le mot de passe créé en réponse au message.

1. Lorsque la connexion est terminée, l'application affiche la liste des compartiments S3.

1. Exécutez l'application IAM. L'application affiche la liste des utilisateurs IAM. Cela est vrai même si aucune deuxième connexion n'a été effectuée. L'application IAM utilise le jeton temporaire créé précédemment.

## Nettoyage
<a name="sso-tutorial-app-only-cleanup"></a>

Si vous ne souhaitez pas conserver les ressources que vous avez créées au cours de ce didacticiel, nettoyez-les. Il peut s'agir de AWS ressources ou de ressources de votre environnement de développement, telles que des fichiers et des dossiers.