

 AWS SDK untuk .NET V3 telah memasuki mode pemeliharaan.

Kami menyarankan Anda bermigrasi ke [AWS SDK untuk .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Untuk detail dan informasi tambahan tentang cara bermigrasi, silakan lihat [pengumuman mode pemeliharaan](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/) kami.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengautentikasi pengguna dengan Amazon Cognito
<a name="cognito-apis-intro"></a>

**catatan**  
Informasi dalam topik ini khusus untuk proyek berdasarkan .NET Framework dan AWS SDK untuk .NET versi 3.3 dan sebelumnya.

Menggunakan Amazon Cognito Identity, Anda dapat membuat identitas unik untuk pengguna Anda dan mengautentikasi mereka untuk akses aman ke AWS sumber daya Anda seperti Amazon S3 atau Amazon DynamoDB. Amazon Cognito Identity mendukung penyedia identitas publik seperti Amazon, Facebook, Twitter/Digit, Google, atau penyedia yang kompatibel dengan OpenID Connect serta identitas yang tidak diautentikasi. Amazon Cognito juga mendukung [identitas otentikasi pengembang](https://aws.amazon.com/blogs/mobile/amazon-cognito-announcing-developer-authenticated-identities/), yang memungkinkan Anda mendaftarkan dan mengautentikasi pengguna menggunakan proses otentikasi backend Anda sendiri, sambil tetap menggunakan Amazon Cognito Sync untuk menyinkronkan data pengguna dan mengakses sumber daya. AWS 

Untuk informasi selengkapnya tentang [Amazon Cognito](https://aws.amazon.com/cognito/), lihat Panduan Pengembang [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/).

Contoh kode berikut menunjukkan cara mudah menggunakan Identitas Amazon Cognito. [Penyedia kredensial](cognito-creds-provider.md)Contoh menunjukkan cara membuat dan mengautentikasi identitas pengguna. [CognitoAuthentication pustaka ekstensi](cognito-authentication-extension.md)Contoh menunjukkan cara menggunakan pustaka CognitoAuthentication ekstensi untuk mengautentikasi kumpulan pengguna Amazon Cognito.

**Topics**
+ [Penyedia kredensial](cognito-creds-provider.md)
+ [CognitoAuthentication pustaka ekstensi](cognito-authentication-extension.md)

# Penyedia kredensi Amazon Cognito
<a name="cognito-creds-provider"></a>

**catatan**  
Informasi dalam topik ini khusus untuk proyek berdasarkan .NET Framework dan AWS SDK untuk .NET versi 3.3 dan sebelumnya.

 `Amazon.CognitoIdentity.CognitoAWSCredentials`, ditemukan di [AWSSDK. CognitoIdentity](https://www.nuget.org/packages/AWSSDK.CognitoIdentity/) NuGetpackage, adalah objek kredensial yang menggunakan Amazon Cognito dan AWS Security Token Service AWS STS() untuk mengambil kredensional untuk melakukan panggilan. AWS 

Langkah pertama dalam menyiapkan `CognitoAWSCredentials` adalah membuat “kumpulan identitas”. (Kumpulan identitas adalah penyimpan informasi identitas pengguna yang spesifik untuk akun Anda. Informasi tersebut dapat diambil kembali di seluruh platform klien, perangkat, dan sistem operasi, sehingga jika pengguna mulai menggunakan aplikasi di ponsel dan kemudian beralih ke tablet, informasi aplikasi yang bertahan masih tersedia untuk pengguna tersebut. Anda dapat membuat kumpulan identitas baru dari konsol Amazon Cognito. Jika Anda menggunakan konsol, itu juga akan memberi Anda informasi lain yang Anda butuhkan:
+ Nomor akun Anda - Nomor 12 digit, seperti 123456789012, yang unik untuk akun Anda.
+ Peran yang tidak diautentikasi ARN- Peran yang akan diasumsikan oleh pengguna yang tidak diautentikasi. Misalnya, peran ini dapat memberikan izin hanya-baca ke data Anda.
+ Peran yang diautentikasi ARN- Peran yang akan diasumsikan oleh pengguna yang diautentikasi. Peran ini dapat memberikan izin yang lebih luas untuk data Anda.

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

Contoh kode berikut menunjukkan cara mengatur`CognitoAWSCredentials`, yang kemudian dapat Anda gunakan untuk melakukan panggilan ke Amazon S3 sebagai pengguna yang tidak diautentikasi. Ini memungkinkan Anda melakukan panggilan hanya dengan jumlah minimum data yang diperlukan untuk mengautentikasi pengguna. Izin pengguna dikendalikan oleh peran, sehingga Anda dapat mengonfigurasi akses sesuai kebutuhan.

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

## Gunakan AWS sebagai pengguna yang tidak diautentikasi
<a name="use-aws-as-an-unauthenticated-user"></a>

Contoh kode berikut menunjukkan bagaimana Anda dapat mulai menggunakan AWS sebagai pengguna yang tidak diautentikasi, kemudian mengautentikasi melalui Facebook dan memperbarui kredensialnya untuk menggunakan kredensi Facebook. Dengan menggunakan pendekatan ini, Anda dapat memberikan kemampuan yang berbeda kepada pengguna yang diautentikasi melalui peran yang diautentikasi. Misalnya, Anda mungkin memiliki aplikasi telepon yang memungkinkan pengguna untuk melihat konten secara anonim, tetapi memungkinkan mereka untuk memposting jika mereka masuk dengan satu atau lebih penyedia yang dikonfigurasi.

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

`CognitoAWSCredentials`Objek menyediakan lebih banyak fungsionalitas jika Anda menggunakannya dengan `AmazonCognitoSyncClient` yang merupakan bagian dari AWS SDK untuk .NET. Jika Anda menggunakan keduanya `AmazonCognitoSyncClient` dan`CognitoAWSCredentials`, Anda tidak perlu menentukan `IdentityId` properti `IdentityPoolId` dan saat melakukan panggilan dengan`AmazonCognitoSyncClient`. Properti ini secara otomatis diisi dari`CognitoAWSCredentials`. Contoh kode berikutnya menggambarkan hal ini, serta peristiwa yang memberi tahu Anda setiap kali ada perubahan`IdentityId`. `CognitoAWSCredentials` `IdentityId`Dapat berubah dalam beberapa kasus, seperti ketika mengubah dari pengguna yang tidak diautentikasi ke yang diautentikasi.

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

# Contoh pustaka CognitoAuthentication ekstensi Amazon
<a name="cognito-authentication-extension"></a>

**catatan**  
Informasi dalam topik ini khusus untuk proyek berdasarkan .NET Framework dan AWS SDK untuk .NET versi 3.3 dan sebelumnya.

Pustaka CognitoAuthentication ekstensi, ditemukan di [Amazon.Extensions. CognitoAuthentication](https://www.nuget.org/packages/Amazon.Extensions.CognitoAuthentication/) NuGet paket, menyederhanakan proses otentikasi kumpulan pengguna Amazon Cognito untuk pengembang.NET Core dan Xamarin. Pustaka dibangun di atas API penyedia Identitas Amazon Cognito untuk membuat dan mengirim panggilan API otentikasi pengguna.

## Menggunakan pustaka CognitoAuthentication ekstensi
<a name="using-the-cognitoauthentication-extension-library"></a>

Amazon Cognito memiliki beberapa built-in `AuthFlow` dan `ChallengeName` nilai untuk alur otentikasi standar untuk memvalidasi nama pengguna dan kata sandi melalui Secure Remote Password (SRP). Untuk informasi selengkapnya tentang alur autentikasi, lihat Alur Otentikasi [Kumpulan Pengguna Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html).

Contoh berikut memerlukan `using` pernyataan ini:

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

### Gunakan otentikasi dasar
<a name="use-basic-authentication"></a>

Buat [AmazonCognitoIdentityProviderClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CognitoIdentityProvider/TCognitoIdentityProviderClient.html)menggunakan [Anonymous AWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TAnonymousAWSCredentials.html), yang tidak memerlukan permintaan yang ditandatangani. Anda tidak perlu menyediakan wilayah, kode yang mendasarinya memanggil `FallbackRegionFactory.GetRegionEndpoint()` jika suatu wilayah tidak disediakan. Buat `CognitoUserPool` dan `CognitoUser` objek. Panggil `StartWithSrpAuthAsync` metode dengan `InitiateSrpAuthRequest` yang berisi kata sandi pengguna.

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

}
```

### Otentikasi dengan tantangan
<a name="authenticate-with-challenges"></a>

Melanjutkan alur otentikasi dengan tantangan, seperti dengan NewPasswordRequired dan Multi-Factor Authentication (MFA), juga lebih sederhana. Satu-satunya persyaratan adalah CognitoAuthentication objek, kata sandi pengguna untuk SRP, dan informasi yang diperlukan untuk tantangan berikutnya, yang diperoleh setelah meminta pengguna untuk memasukkannya. Kode berikut menunjukkan satu cara untuk memeriksa jenis tantangan dan mendapatkan respons yang sesuai untuk MFA dan NewPasswordRequired tantangan selama alur otentikasi.

Lakukan permintaan otentikasi dasar seperti sebelumnya, dan`await`. `AuthFlowResponse` Ketika respon diterima loop melalui `AuthenticationResult` objek yang dikembalikan. Jika `ChallengeName` jenisnya`NEW_PASSWORD_REQUIRED`, panggil `RespondToNewPasswordRequiredAsync` metodenya.

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

### Gunakan AWS sumber daya setelah otentikasi
<a name="use-aws-resources-after-authentication"></a>

Setelah pengguna diautentikasi menggunakan CognitoAuthentication perpustakaan, langkah selanjutnya adalah mengizinkan pengguna mengakses AWS sumber daya yang sesuai. Untuk melakukan ini, Anda harus membuat kumpulan identitas melalui konsol Identitas Federasi Amazon Cognito. Dengan menentukan kumpulan pengguna Amazon Cognito yang Anda buat sebagai penyedia, menggunakan PooLid dan ClientID, Anda dapat mengizinkan pengguna kumpulan pengguna Amazon Cognito mengakses sumber daya yang terhubung ke akun Anda. AWS Anda juga dapat menentukan peran yang berbeda untuk memungkinkan pengguna yang tidak diautentikasi dan yang diautentikasi mengakses sumber daya yang berbeda. Anda dapat mengubah aturan ini di konsol IAM, tempat Anda dapat menambahkan atau menghapus izin di bidang **Tindakan** kebijakan terlampir peran. Kemudian, dengan menggunakan kumpulan identitas yang sesuai, kumpulan pengguna, dan informasi pengguna Amazon Cognito, Anda dapat melakukan panggilan ke sumber daya yang berbeda AWS . Contoh berikut menunjukkan pengguna yang diautentikasi dengan SRP yang mengakses bucket Amazon S3 berbeda yang diizinkan oleh peran kumpulan identitas terkait

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

## Opsi otentikasi lainnya
<a name="more-authentication-options"></a>

Selain SRP,, dan MFA NewPasswordRequired, CognitoAuthentication pustaka ekstensi menawarkan aliran otentikasi yang lebih mudah untuk:
+ Kustom - Memulai dengan panggilan ke `StartWithCustomAuthAsync(InitiateCustomAuthRequest customRequest)` 
+ RefreshToken - Memulai dengan panggilan ke `StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest)` 
+ RefreshTokenSRP - Memulai dengan panggilan ke `StartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequest refreshTokenRequest)` 
+ AdminNoSRP - Memulai dengan panggilan ke `StartWithAdminNoSrpAuthAsync(InitiateAdminNoSrpAuthRequest adminAuthRequest)` 

Panggil metode yang sesuai tergantung pada aliran yang Anda inginkan. Kemudian lanjutkan meminta pengguna dengan tantangan seperti yang disajikan dalam `AuthFlowResponse` objek dari setiap panggilan metode. Sebut juga metode respons yang sesuai, seperti `RespondToSmsMfaAuthAsync` untuk tantangan MFA dan `RespondToCustomAuthAsync` untuk tantangan khusus.