

Der AWS SDK für .NET V3 ist in den Wartungsmodus übergegangen.

Wir empfehlen Ihnen, auf [AWS SDK für .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) zu migrieren. Weitere Einzelheiten und Informationen zur Migration finden Sie in unserer [Ankündigung zum Wartungsmodus](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Benutzer mit Amazon Cognito authentifizieren
<a name="cognito-apis-intro"></a>

**Anmerkung**  
Die Informationen in diesem Thema beziehen sich speziell auf Projekte, die auf .NET Framework und AWS SDK für .NET Version 3.3 und früher basieren.

Mit Amazon Cognito Identity können Sie eindeutige Identitäten für Ihre Benutzer erstellen und sie für den sicheren Zugriff auf Ihre AWS Ressourcen wie Amazon S3 oder Amazon DynamoDB authentifizieren. Amazon Cognito Identity unterstützt öffentliche Identitätsanbieter wie Amazon, Facebook, Twitter/Digits, Google oder andere OpenID Connect-kompatible Anbieter sowie nicht authentifizierte Identitäten. Amazon Cognito unterstützt auch [entwicklerauthentifizierte Identitäten](https://aws.amazon.com/blogs/mobile/amazon-cognito-announcing-developer-authenticated-identities/), mit denen Sie Benutzer mithilfe Ihres eigenen Backend-Authentifizierungsprozesses registrieren und authentifizieren können, während Sie weiterhin Amazon Cognito Sync verwenden, um Benutzerdaten zu synchronisieren und auf Ressourcen zuzugreifen. AWS 

Weitere Informationen zu [Amazon Cognito](https://aws.amazon.com/cognito/) finden Sie im [Amazon Cognito Developer Guide](https://docs.aws.amazon.com/cognito/latest/developerguide/).

Die folgenden Codebeispiele zeigen, wie Sie Amazon Cognito Identity einfach verwenden können. Das [Anmeldeinformationsanbieter](cognito-creds-provider.md) Beispiel zeigt, wie Benutzeridentitäten erstellt und authentifiziert werden. Das [CognitoAuthentication Erweiterungsbibliothek](cognito-authentication-extension.md) Beispiel zeigt, wie die CognitoAuthentication Erweiterungsbibliothek zur Authentifizierung von Amazon Cognito Cognito-Benutzerpools verwendet wird.

**Topics**
+ [Anmeldeinformationsanbieter](cognito-creds-provider.md)
+ [CognitoAuthentication Erweiterungsbibliothek](cognito-authentication-extension.md)

# Anbieter Amazon Cognito Cognito-Anmeldeinformationen
<a name="cognito-creds-provider"></a>

**Anmerkung**  
Die Informationen in diesem Thema beziehen sich speziell auf Projekte, die auf .NET Framework und AWS SDK für .NET Version 3.3 und früher basieren.

 `Amazon.CognitoIdentity.CognitoAWSCredentials`, gefunden in der [AWSSDK. CognitoIdentity](https://www.nuget.org/packages/AWSSDK.CognitoIdentity/) NuGetpackage, ist ein Anmeldeinformationsobjekt, das Amazon Cognito und the AWS -Security-Token-Service (AWS STS) verwendet, um Anmeldeinformationen für AWS Anrufe abzurufen.

Der erste Schritt beim Einrichten von `CognitoAWSCredentials` besteht darin, einen „Identitätspool“ zu erstellen. (In einem Identitätspool werden Benutzeridentitätsinformationen gespeichert, die speziell für Ihr Konto gelten.) Die Daten können über Client-Plattformen, Geräte und Betriebssysteme hinweg abgerufen werden, sodass die persistenten App-Informationen für einen Benutzer, der Ihre App zunächst auf einem Smartphone und später auf einem Tablet verwendet, noch verfügbar sind. Sie können über die Amazon Cognito Cognito-Konsole einen neuen Identitätspool erstellen. Wenn Sie die Konsole verwenden, erhalten Sie so auch andere Informationen, die Sie benötigen:
+ Ihre Kontonummer – Eine 12-stellige Zahl, z. B. 123456789012, die speziell für Ihr Konto gilt.
+ ARN der nicht authentifizierten Rolle – Eine Rolle, die von nicht authentifizierten Benutzern übernommen wird. Beispiel: Diese Rolle bietet schreibgeschützten Zugriff auf Ihre Daten.
+ ARN der authentifizierten Rolle – Eine Rolle, die von authentifizierten Benutzern übernommen wird. Diese Rolle kann einen umfassenderen Zugriff auf Ihre Daten gewähren.

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

Das folgende Codebeispiel zeigt die Einrichtung`CognitoAWSCredentials`, die Sie dann verwenden können, um Amazon S3 als nicht authentifizierter Benutzer aufzurufen. Auf diese Weise können Sie Aufrufe mit nur einer minimale Menge an Daten machen, die für die Authentifizierung des Benutzers erforderlich ist. Da die Benutzerberechtigungen über die Rolle gesteuert werden, können Sie den Zugriff ganz nach Bedarf konfigurieren.

```
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();
}
```

## AWS Als nicht authentifizierter Benutzer verwenden
<a name="use-aws-as-an-unauthenticated-user"></a>

Das folgende Codebeispiel zeigt, wie Sie mit der Verwendung AWS als nicht authentifizierter Benutzer beginnen, sich dann über Facebook authentifizieren und die Anmeldeinformationen aktualisieren können, um Facebook-Anmeldeinformationen zu verwenden. Mit diesem Ansatz können Sie authentifizierten Benutzern über die authentifizierte Rolle unterschiedliche Fähigkeiten erteilen. So ist beispielsweise eine Telefonanwendung möglich, die Benutzern die anonyme Ansicht von Inhalten gewährt, ihnen das Posten von Inhalten aber nur gestattet, wenn sie sich mit einem oder mehreren der konfigurierten Anbieter anmelden.

```
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();
}
```

Das `CognitoAWSCredentials`-Objekt bietet sogar noch mehr Funktionalität, wenn Sie es zusammen mit dem `AmazonCognitoSyncClient` verwenden, der Teil des AWS SDK für .NET ist. Wenn Sie sowohl als auch `AmazonCognitoSyncClient` verwenden`CognitoAWSCredentials`, müssen Sie die `IdentityId` Eigenschaften `IdentityPoolId` und nicht angeben, wenn Sie mit dem aufrufen. `AmazonCognitoSyncClient` Diese Eigenschaften werden automatisch aus `CognitoAWSCredentials` ausgefüllt. Dies wird im nächsten Codebeispiel zusammen mit einem Ereignis veranschaulicht, das Sie immer dann benachrichtigt, wenn sich die `IdentityId` für `CognitoAWSCredentials` ändert. In einigen Fällen kann sich die `IdentityId` ändern. So z. B. auch beim Wechsel von einem nicht authentifizierten zu einem authentifizierten Benutzer.

```
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 = "..."        
    });
}
```

# Beispiele Amazon CognitoAuthentication Amazon-Erweiterungsbibliotheken
<a name="cognito-authentication-extension"></a>

**Anmerkung**  
Die Informationen in diesem Thema beziehen sich speziell auf Projekte, die auf .NET Framework und AWS SDK für .NET Version 3.3 und früher basieren.

Die CognitoAuthentication Erweiterungsbibliothek befindet sich in [Amazon.Extensions. CognitoAuthentication](https://www.nuget.org/packages/Amazon.Extensions.CognitoAuthentication/) NuGet Paket, vereinfacht den Authentifizierungsprozess von Amazon Cognito Cognito-Benutzerpools für .NET Core- und Xamarin-Entwickler. Die Bibliothek baut auf der Amazon Cognito Identity Provider-API auf, um API-Aufrufe zur Benutzerauthentifizierung zu erstellen und zu senden.

## Verwenden der CognitoAuthentication Erweiterungsbibliothek
<a name="using-the-cognitoauthentication-extension-library"></a>

Amazon Cognito verfügt über einige integrierte `AuthFlow` `ChallengeName` Werte für einen Standardauthentifizierungsablauf zur Validierung von Benutzername und Passwort über das Secure Remote Password (SRP). Weitere Informationen zum Authentifizierungsablauf finden Sie unter [Amazon Cognito Ablauf der Authentifizierung in Benutzerpools](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html).

Die folgenden Beispiele erfordern diese `using`-Anweisungen:

```
// 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;
```

### Verwenden Sie die Standardauthentifizierung
<a name="use-basic-authentication"></a>

Erstellen Sie eine [AmazonCognitoIdentityProviderClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CognitoIdentityProvider/TCognitoIdentityProviderClient.html)mit [Anonym AWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TAnonymousAWSCredentials.html), für die keine signierten Anfragen erforderlich sind. Sie müssen keine Region angeben. Der zugrunde liegende Code ruft `FallbackRegionFactory.GetRegionEndpoint()` auf, wenn keine Region angegeben ist. Erstellen Sie die Objekte `CognitoUserPool` und `CognitoUser`. Rufen Sie die Methode `StartWithSrpAuthAsync` mit einer `InitiateSrpAuthRequest` auf, in der das Benutzerpasswort enthalten ist.

```
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;

}
```

### Authentifizieren Sie sich bei Herausforderungen
<a name="authenticate-with-challenges"></a>

Es ist auch einfacher, den Authentifizierungsfluss bei NewPasswordRequired Herausforderungen wie Multi-Factor Authentication (MFA) fortzusetzen. Die einzigen Anforderungen sind die CognitoAuthentication Objekte, das Benutzerkennwort für SRP und die erforderlichen Informationen für die nächste Herausforderung. Diese Informationen werden abgerufen, nachdem der Benutzer zur Eingabe aufgefordert wurde. Der folgende Code zeigt eine Möglichkeit, den Challenge-Typ zu überprüfen und die entsprechenden Antworten für MFA und NewPasswordRequired Challenges während des Authentifizierungsprozesses zu erhalten.

Führen Sie wie zuvor eine grundlegende Authentifizierung durch und geben Sie dann `await` für eine `AuthFlowResponse` aus. Wenn die Antwort empfangen wird, durchlaufen Sie das zurückgegebene `AuthenticationResult`-Objekt. Wenn der `ChallengeName`-Typ `NEW_PASSWORD_REQUIRED` ist, rufen Sie die Methode `RespondToNewPasswordRequiredAsync` auf.

```
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.");
    }
 
}
```

### Verwenden Sie AWS Ressourcen nach der Authentifizierung
<a name="use-aws-resources-after-authentication"></a>

Sobald ein Benutzer mithilfe der CognitoAuthentication Bibliothek authentifiziert wurde, besteht der nächste Schritt darin, dem Benutzer den Zugriff auf die entsprechenden AWS Ressourcen zu ermöglichen. Dazu müssen Sie über die Amazon Cognito Federated Identities-Konsole einen Identitätspool erstellen. Indem Sie den Amazon Cognito Cognito-Benutzerpool, den Sie als Anbieter erstellt haben, mithilfe seiner PoolID und ClientID angeben, können Sie den Benutzern Ihres Amazon Cognito Cognito-Benutzerpools den Zugriff auf AWS Ressourcen ermöglichen, die mit Ihrem Konto verbunden sind. Sie können auch unterschiedliche Rollen für authentifizierte und nicht authentifizierte Benutzer angeben, um so Zugriff auf unterschiedliche Ressourcen zu ermöglichen. Sie können diese Regeln in der IAM-Konsole ändern. Hier können Sie im Feld **Aktion** der an die Richtlinie angefügten Rolle Berechtigungen hinzufügen oder entfernen. Anschließend können Sie mithilfe des entsprechenden Identitätspools, Benutzerpools und Amazon Cognito Cognito-Benutzerinformationen Aufrufe an verschiedene AWS Ressourcen tätigen. Das folgende Beispiel zeigt einen Benutzer, der bei SRP authentifiziert ist und auf die verschiedenen Amazon S3 S3-Buckets zugreift, die durch die Rolle des zugehörigen Identitätspools zugelassen sind.

```
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);
        }
    }
}
```

## Weitere Authentifizierungsoptionen
<a name="more-authentication-options"></a>

Zusätzlich zu SRP NewPasswordRequired, und MFA bietet die CognitoAuthentication Erweiterungsbibliothek einen einfacheren Authentifizierungsablauf für:
+ Custom – Initiiert durch einen Aufruf an `StartWithCustomAuthAsync(InitiateCustomAuthRequest customRequest)` 
+ RefreshToken - Initiieren Sie mit einem Anruf an `StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest)` 
+ RefreshTokenSRP — Initiieren Sie mit einem Anruf an `StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest)` 
+ AdminNoSRP — Initiieren Sie mit einem Anruf an `StartWithAdminNoSrpAuthAsync(InitiateAdminNoSrpAuthRequest adminAuthRequest)` 

Rufen Sie abhängig vom gewünschten Ablauf die entsprechende Methode auf. Fahren Sie dann mit Eingabeaufforderungen an den Benutzer fort, die ihm in den `AuthFlowResponse`-Objekten eines jeden Methodenaufrufs angezeigt werden. Rufen Sie außerdem die entsprechende Antwortmethode, wie z. B. `RespondToSmsMfaAuthAsync` für MFA-Aufforderungen und `RespondToCustomAuthAsync` für benutzerdefinierte Aufforderungen, auf.