Esempi di librerie di CognitoAuthentication estensioni Amazon - AWS SDK for .NET

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à.

Esempi di librerie di CognitoAuthentication estensioni Amazon

Nota

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

La libreria di CognitoAuthentication estensioni, disponibile in 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

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.

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

Crea un AmazonCognitoIdentityProviderClientaccount anonimo 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

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

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 campoAction (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

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.