

È stata rilasciata la versione 4 (V4) di\$1 AWS SDK per .NET 

Per informazioni su come apportare modifiche e migrare le applicazioni, consulta l'argomento sulla [migrazione](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Autenticazione degli utenti con Amazon Cognito
<a name="cognito-apis-intro"></a>

**Nota**  
Le informazioni contenute in questo argomento si riferiscono specificamente ai progetti basati su.NET Framework e alla AWS SDK per .NET versione 3.3 e precedenti.

Utilizzando Amazon Cognito Identity, puoi creare identità uniche per i tuoi utenti e autenticarli per un accesso sicuro alle tue AWS risorse come Amazon S3 o Amazon DynamoDB. Amazon Cognito Identity supporta provider di identità pubblici come Amazon, Facebook, Twitter/Digits, Google o qualsiasi provider compatibile con OpenID Connect, nonché identità non autenticate. Amazon Cognito supporta anche [identità autenticate dagli sviluppatori](https://aws.amazon.com/blogs/mobile/amazon-cognito-announcing-developer-authenticated-identities/), che consentono di registrare e autenticare gli utenti utilizzando il proprio processo di autenticazione back-end, continuando a utilizzare Amazon Cognito Sync per sincronizzare i dati degli utenti e accedere alle risorse. AWS 

Per ulteriori informazioni su [Amazon Cognito, consulta la Amazon Cognito](https://aws.amazon.com/cognito/) [Developer Guide](https://docs.aws.amazon.com/cognito/latest/developerguide/).

I seguenti esempi di codice mostrano come usare facilmente Amazon Cognito Identity. L'[Provider di credenziali](cognito-creds-provider.md)esempio mostra come creare e autenticare le identità degli utenti. L'[CognitoAuthentication libreria di estensioni](cognito-authentication-extension.md)esempio mostra come utilizzare la libreria di CognitoAuthentication estensioni per autenticare i pool di utenti di Amazon Cognito.

**Topics**
+ [Provider di credenziali](cognito-creds-provider.md)
+ [CognitoAuthentication libreria di estensioni](cognito-authentication-extension.md)

# Provider di credenziali Amazon Cognito
<a name="cognito-creds-provider"></a>

**Nota**  
Le informazioni contenute in questo argomento si riferiscono specificamente ai progetti basati su.NET Framework e alla AWS SDK per .NET versione 3.3 e precedenti.

 `Amazon.CognitoIdentity.CognitoAWSCredentials`, disponibile in [AWSSDK. CognitoIdentity](https://www.nuget.org/packages/AWSSDK.CognitoIdentity/) NuGetpackage, è un oggetto di credenziali che utilizza Amazon Cognito e AWS Security Token Service the AWS STS() per recuperare le credenziali per effettuare chiamate. AWS 

Il primo passo per la configurazione di `CognitoAWSCredentials` è creare un "pool di identità". (Un pool di identità è un archivio di informazioni sull'identità dell'utente specifico per il tuo account. Le informazioni sono recuperabili su più piattaforme client, dispositivi e sistemi operativi, in modo tale che, se un utente inizia a usare l'applicazione su un telefono e successivamente su un tablet, le informazioni sull'applicazione restino a disposizione di quell'utente. Puoi creare un nuovo pool di identità dalla console Amazon Cognito. Se stai utilizzando la console, ti verranno fornite le altre informazioni necessarie:
+ Il tuo numero account: un numero di 12 cifre, ad esempio 123456789012, univoco per il tuo account.
+ L'ARN del ruolo non autenticato: un ruolo che verrà assunto dagli utenti non autenticati. Ad esempio, questo ruolo è in grado di fornire le autorizzazioni di sola lettura per i dati.
+ L'ARN del ruolo autenticato: un ruolo che verrà assunto dagli utenti autenticati. Questo ruolo è in grado di fornire autorizzazioni più estese per i dati.

## Configura Cognito AWSCredentials
<a name="set-up-cognitoawscredentials"></a>

Il seguente esempio di codice mostra come eseguire la configurazione`CognitoAWSCredentials`, che puoi quindi utilizzare per effettuare una chiamata ad Amazon S3 come utente non autenticato. In questo modo è possibile effettuare chiamate con solo una quantità minima dei dati richiesti per autenticare l'utente. Le autorizzazioni utente sono controllate dal ruolo, perciò è possibile configurare l'accesso necessario.

```
CognitoAWSCredentials credentials = new CognitoAWSCredentials(
    accountId,        // Account number
    identityPoolId,   // Identity pool ID
    unAuthRoleArn,    // Role for unauthenticated users
    null,             // Role for authenticated users, not set
    region);
using (var s3Client = new AmazonS3Client(credentials))
{
    s3Client.ListBuckets();
}
```

## Utilizza AWS come utente non autenticato
<a name="use-aws-as-an-unauthenticated-user"></a>

Il seguente esempio di codice mostra come iniziare a utilizzare AWS come utente non autenticato, quindi autenticarsi tramite Facebook e aggiornare le credenziali per utilizzare le credenziali di Facebook. Tramite questo approccio, è possibile concedere diverse funzionalità agli utenti autenticati tramite il ruolo autenticato. Ad esempio, sarebbe possibile avere un'applicazione per telefono che consente agli utenti di visualizzare i contenuti in modo anonimo, ma permette loro di pubblicare se connessi a uno o più provider configurati.

```
CognitoAWSCredentials credentials = new CognitoAWSCredentials(
    accountId, identityPoolId,
    unAuthRoleArn,    // Role for unauthenticated users
    authRoleArn,      // Role for authenticated users
    region);
using (var s3Client = new AmazonS3Client(credentials))
{
    // Initial use will be unauthenticated
    s3Client.ListBuckets();

    // Authenticate user through Facebook
    string facebookToken = GetFacebookAuthToken();

    // Add Facebook login to credentials. This clears the current AWS credentials
    // and retrieves new AWS credentials using the authenticated role.
    credentials.AddLogin("graph.facebook.com", facebookAccessToken);

    // This call is performed with the authenticated role and credentials
    s3Client.ListBuckets();
}
```

L'oggetto `CognitoAWSCredentials` offre anche più funzionalità se utilizzato con il `AmazonCognitoSyncClient` che fa parte di AWS SDK per .NET. Se si utilizzano entrambi `AmazonCognitoSyncClient` e`CognitoAWSCredentials`, non è necessario specificare le `IdentityId` proprietà `IdentityPoolId` e quando si effettuano chiamate con. `AmazonCognitoSyncClient` Queste proprietà vengono automaticamente riempite da `CognitoAWSCredentials`. Il prossimo codice illustra quanto sopra, nonché un evento che notifica ogni modifica dell'`IdentityId` per `CognitoAWSCredentials`. Il codice `IdentityId` può variare in alcuni casi, ad esempio quando si passa da un utente non autenticato a uno autenticato.

```
CognitoAWSCredentials credentials = GetCognitoAWSCredentials();

// Log identity changes
credentials.IdentityChangedEvent += (sender, args) =>
{
    Console.WriteLine("Identity changed: [{0}] => [{1}]", args.OldIdentityId, args.NewIdentityId);
};

using (var syncClient = new AmazonCognitoSyncClient(credentials))
{
    var result = syncClient.ListRecords(new ListRecordsRequest
    {
        DatasetName = datasetName
        // No need to specify these properties
        //IdentityId = "...",
        //IdentityPoolId = "..."        
    });
}
```

# Esempi di librerie di CognitoAuthentication estensioni Amazon
<a name="cognito-authentication-extension"></a>

**Nota**  
Le informazioni in questo argomento sono specifiche per i progetti basati su.NET Framework e la AWS SDK per .NET versione 3.3 e precedenti.

La libreria di CognitoAuthentication estensioni, disponibile in [Amazon.Extensions. CognitoAuthentication](https://www.nuget.org/packages/Amazon.Extensions.CognitoAuthentication/) NuGet pacchetto, semplifica il processo di autenticazione dei pool di utenti di Amazon Cognito per gli sviluppatori.NET Core e Xamarin. La libreria si basa sull'API del provider di identità Amazon Cognito per creare e inviare chiamate API di autenticazione degli utenti.

## Utilizzo della libreria di CognitoAuthentication estensioni
<a name="using-the-cognitoauthentication-extension-library"></a>

Amazon Cognito dispone di alcuni `ChallengeName` valori `AuthFlow` e funzionalità integrati per un flusso di autenticazione standard per convalidare nome utente e password tramite Secure Remote Password (SRP). Per ulteriori informazioni sul flusso di autenticazione, consulta [Flusso di autenticazione del pool di utenti Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html).

I seguenti esempi richiedono le seguenti istruzioni `using`:

```
// Required for all examples
using System;
using Amazon;
using Amazon.CognitoIdentity;
using Amazon.CognitoIdentityProvider;
using Amazon.Extensions.CognitoAuthentication;
using Amazon.Runtime;
// Required for the GetS3BucketsAsync example
using Amazon.S3;
using Amazon.S3.Model;
```

### Usa l'autenticazione di base
<a name="use-basic-authentication"></a>

Crea un [AmazonCognitoIdentityProviderClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CognitoIdentityProvider/TCognitoIdentityProviderClient.html)account [anonimo](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TAnonymousAWSCredentials.html) utilizzandoAWSCredentials, che non richiede richieste firmate. Non è necessario fornire una regione, il codice sottostante chiamerà `FallbackRegionFactory.GetRegionEndpoint()` se non viene fornita una regione. Creare `CognitoUserPool` e oggetti `CognitoUser`. Chiamare il metodo `StartWithSrpAuthAsync` con un codice `InitiateSrpAuthRequest` che contiene le password utente.

```
public static async void GetCredsAsync()
{
    AmazonCognitoIdentityProviderClient provider =
        new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials());
    CognitoUserPool userPool = new CognitoUserPool("poolID", "clientID", provider);
    CognitoUser user = new CognitoUser("username", "clientID", userPool, provider);
    InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
    {
        Password = "userPassword"
    };

    AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
    accessToken = authResponse.AuthenticationResult.AccessToken;

}
```

### Autentica con sfide
<a name="authenticate-with-challenges"></a>

Inoltre, è più semplice continuare il flusso di autenticazione anche in presenza di problematiche, ad esempio con NewPasswordRequired Multi-Factor Authentication (MFA). Gli unici requisiti sono CognitoAuthentication gli oggetti, la password dell'utente per SRP e le informazioni necessarie per la sfida successiva, che viene acquisita dopo aver richiesto all'utente di inserirla. Il codice seguente mostra un modo per verificare il tipo di sfida e ottenere le risposte appropriate per l'MFA e NewPasswordRequired le sfide durante il flusso di autenticazione.

Effettuare una richiesta di autenticazione di base come in precedenza e `await` una `AuthFlowResponse`. Quando la risposta è ricevuta in loop attraverso l'oggetto restituito `AuthenticationResult`. Se il tipo `ChallengeName` è `NEW_PASSWORD_REQUIRED`, chiamare il metodo `RespondToNewPasswordRequiredAsync`.

```
public static async void GetCredsChallengesAsync()
{
    AmazonCognitoIdentityProviderClient provider = 
        new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials());
    CognitoUserPool userPool = new CognitoUserPool("poolID", "clientID", provider);
    CognitoUser user = new CognitoUser("username", "clientID", userPool, provider);
    InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest(){
        Password = "userPassword"
    };

    AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);

    while (authResponse.AuthenticationResult == null)
    {
        if (authResponse.ChallengeName == ChallengeNameType.NEW_PASSWORD_REQUIRED)
        {
            Console.WriteLine("Enter your desired new password:");
            string newPassword = Console.ReadLine();

            authResponse = await user.RespondToNewPasswordRequiredAsync(new RespondToNewPasswordRequiredRequest()
            {
                SessionID = authResponse.SessionID,
                NewPassword = newPassword
            });
            accessToken = authResponse.AuthenticationResult.AccessToken;
        }
        else if (authResponse.ChallengeName == ChallengeNameType.SMS_MFA)
        {
            Console.WriteLine("Enter the MFA Code sent to your device:");
            string mfaCode = Console.ReadLine();

            AuthFlowResponse mfaResponse = await user.RespondToSmsMfaAuthAsync(new RespondToSmsMfaRequest()
            {
                SessionID = authResponse.SessionID,
                MfaCode = mfaCode

            }).ConfigureAwait(false);
            accessToken = authResponse.AuthenticationResult.AccessToken;
        }
        else
        {
            Console.WriteLine("Unrecognized authentication challenge.");
            accessToken = "";
            break;
        }
    }

    if (authResponse.AuthenticationResult != null)
    {
        Console.WriteLine("User successfully authenticated.");
    }
    else
    {
        Console.WriteLine("Error in authentication process.");
    }
 
}
```

### Utilizza AWS le risorse dopo l'autenticazione
<a name="use-aws-resources-after-authentication"></a>

Una volta che un utente è autenticato utilizzando la CognitoAuthentication libreria, il passaggio successivo consiste nel consentire all'utente di accedere alle AWS risorse appropriate. A tale scopo è necessario creare un pool di identità tramite la console Amazon Cognito Federated Identities. Specificando il pool di utenti di Amazon Cognito che hai creato come provider, utilizzando i relativi PoolID e ClientID, puoi consentire agli utenti del pool di utenti di Amazon Cognito di accedere alle risorse collegate al tuo account. AWS È anche possibile specificare diversi ruoli per consentire a entrambi gli utenti autenticati e non autenticati di accedere alle diverse risorse. È possibile modificare queste regole nella console IAM, dove è possibile aggiungere o rimuovere le autorizzazioni nel campo**Action (Operazione)** della policy collegata del ruolo. Quindi, utilizzando il pool di identità, il pool di utenti e le informazioni utente di Amazon Cognito appropriati, puoi effettuare chiamate a risorse diverse AWS . L'esempio seguente mostra un utente autenticato con SRP che accede ai diversi bucket Amazon S3 consentiti dal ruolo del pool di identità associato.

```
public async void GetS3BucketsAsync()
{
    var provider = new AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials());
    CognitoUserPool userPool = new CognitoUserPool("poolID", "clientID", provider);
    CognitoUser user = new CognitoUser("username", "clientID", userPool, provider);

    string password = "userPassword";

    AuthFlowResponse context = await user.StartWithSrpAuthAsync(new InitiateSrpAuthRequest()
    {
        Password = password
    }).ConfigureAwait(false);

    CognitoAWSCredentials credentials =
        user.GetCognitoAWSCredentials("identityPoolID", RegionEndpoint.< YourIdentityPoolRegion >);

    using (var client = new AmazonS3Client(credentials))
    {
        ListBucketsResponse response =
            await client.ListBucketsAsync(new ListBucketsRequest()).ConfigureAwait(false);

        foreach (S3Bucket bucket in response.Buckets)
        {
            Console.WriteLine(bucket.BucketName);
        }
    }
}
```

## Altre opzioni di autenticazione
<a name="more-authentication-options"></a>

Oltre a SRP e MFA NewPasswordRequired, CognitoAuthentication la libreria di estensioni offre un flusso di autenticazione più semplice per:
+ Custom - Iniziare con una chiamata a `StartWithCustomAuthAsync(InitiateCustomAuthRequest customRequest)` 
+ RefreshToken - Inizia con una chiamata a `StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest)` 
+ RefreshTokenSRP - Inizia con una chiamata a `StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest)` 
+ AdminNoSRP - Inizia con una chiamata a `StartWithAdminNoSrpAuthAsync(InitiateAdminNoSrpAuthRequest adminAuthRequest)` 

Chiamare il metodo appropriato in funzione del flusso desiderato. Quindi continuare a richiedere all'utente le sfide presentate negli oggetti `AuthFlowResponse` di ciascuna chiamata al metodo. Chiamare il metodo di risposta appropriata, ad esempio `RespondToSmsMfaAuthAsync` per le sfide MFA e `RespondToCustomAuthAsync` per le sfide personalizzate.