View a markdown version of this page

Developer-authenticated identitas - Amazon Cognito

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

Developer-authenticated identitas

Amazon Cognito mendukung identitas yang diautentikasi pengembang, selain federasi identitas web melaluiMenyiapkan Facebook sebagai kumpulan identitas IDP,,, dan. Menyiapkan Google sebagai kumpulan identitas iDP Menyiapkan Login with Amazon sebagai kumpulan identitas IDP Menyiapkan Masuk dengan Apple sebagai kumpulan identitas iDP Dengan identitas yang diautentikasi pengembang, Anda dapat mendaftarkan dan mengotentikasi pengguna melalui proses otentikasi Anda sendiri yang ada, sambil tetap menggunakan Amazon Cognito untuk menyinkronkan data pengguna dan mengakses sumber daya. AWS Menggunakan identitas yang diautentikasi pengembang melibatkan interaksi antara perangkat pengguna akhir, backend Anda untuk otentikasi, dan Amazon Cognito. Untuk detail selengkapnya, lihat Mem ahami Otentikasi Amazon Cognito Bagian 2: Identitas Terautentikasi Pengembang di AWS blog.

Memahami alur otentikasi

Operasi GetOpenIdTokenForDeveloperIdentity API dapat memulai otentikasi pengembang untuk otentikasi yang disempurnakan dan otentikasi dasar. API ini mengotentikasi permintaan dengan kredenSIAL administratif. LoginsPeta adalah nama penyedia pengembang kumpulan identitas seperti login.mydevprovider dipasangkan dengan pengenal khusus.

Contoh:

"Logins": { "login.mydevprovider": "my developer identifier" }

Otentikasi yang ditingkatkan

Panggil operasi GetCredentialsForIdentity API dengan Logins peta di mana kuncinya adalah penerbit token yang dikembalikan olehGetOpenIdTokenForDeveloperIdentity, dan nilainya adalah token itu sendiri.

Penerbit (dan karenanya kunci login yang diperlukan) bergantung pada Wilayah kumpulan identitas Anda. Lihat Penerbit Token menurut Wilayah daftar lengkap Wilayah dan penerbit token mereka.

Contoh untuk kumpulan identitas di Wilayah yang menggunakan penerbit global:

"Logins": { "cognito-identity.amazonaws.com": "eyJra12345EXAMPLE" }

Contoh untuk kumpulan identitas di Wilayah yang lebih baru (seperti eu-south-2):

"Logins": { "cognito-identity.eu-south-2.amazonaws.com": "eyJra12345EXAMPLE" }
penting

Kunci peta login harus sama persis dengan klaim iss (penerbit) di token. Jika tidak cocok, GetCredentialsForIdentity mengembalikan: NotAuthorizedException: Invalid login token. Issuer doesn't match providerName

Tip

Untuk menentukan kunci login yang benar secara terprogram, dekode token (JWT) dan baca nilai klaim. iss Gunakan nilai itu sebagai kunci peta login.

GetCredentialsForIdentitydengan identitas yang diautentikasi pengembang mengembalikan kredenSIAL sementara untuk peran terautentikasi default dari kumpulan identitas.

Otentikasi dasar

Panggil operasi AssumeRoleWithWebIdentity API dan minta RoleArn peran IAM apa pun yang memiliki hubungan kepercayaan yang sesuai ditentukan. Tetapkan nilai WebIdentityToken token yang diperoleh dariGetOpenIdTokenForDeveloperIdentity.

Untuk informasi tentang authflow identitas yang diautentikasi pengembang dan perbedaannya dari identitas penyedia eksternal, lihat. Aliran otentikasi kumpulan identitas

Tentukan nama penyedia pengembang dan kaitkan dengan kumpulan identitas

Untuk menggunakan identitas yang diautentikasi pengembang, Anda memerlukan kumpulan identitas yang terkait dengan penyedia pengembang Anda. Untuk melakukannya, ikuti langkah-langkah berikut:

Untuk menambahkan penyedia pengembang kustom
  1. Pilih kum pulan identitas dari konsol https://console.aws.amazon.com/cognito/home Amazon Cognito. Pilih kumpulan identitas.

  2. Pilih tab Akses pengguna.

  3. Pilih Tambahkan penyedia identitas.

  4. Pilih Penye dia pengembang kustom.

  5. Masukkan Nama penyedia developer. Anda tidak dapat mengubah atau menghapus penyedia pengembang setelah menambahkannya.

  6. Pilih Simpan perubahan.

Catatan: Setelah nama penyedia telah diatur, itu tidak dapat diubah.

Menerapkan penyedia identitas

Android

Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. AWSAbstractCognitoIdentityProvider Kelas penyedia identitas Anda harus mengembalikan objek respons yang berisi token sebagai atribut.

Berikut ini adalah contoh dasar dari penyedia identitas.

public class DeveloperAuthenticationProvider extends AWSAbstractCognitoDeveloperIdentityProvider { private static final String developerProvider = "<Developer_provider_name>"; public DeveloperAuthenticationProvider(String accountId, String identityPoolId, Regions region) { super(accountId, identityPoolId, region); // Initialize any other objects needed here. } // Return the developer provider name which you choose while setting up the // identity pool in the &COG; Console @Override public String getProviderName() { return developerProvider; } // Use the refresh method to communicate with your backend to get an // identityId and token. @Override public String refresh() { // Override the existing token setToken(null); // Get the identityId and token by making a call to your backend // (Call to your backend) // Call the update method with updated identityId and token to make sure // these are ready to be used from Credentials Provider. update(identityId, token); return token; } // If the app has a valid identityId return it, otherwise get a valid // identityId from your backend. @Override public String getIdentityId() { // Load the identityId from the cache identityId = cachedIdentityId; if (identityId == null) { // Call to your backend } else { return identityId; } } }

Untuk menggunakan penyedia identitas ini, Anda harus meneruskannya ke CognitoCachingCredentialsProvider. Inilah contohnya:

DeveloperAuthenticationProvider developerProvider = new DeveloperAuthenticationProvider( null, "IDENTITYPOOLID", context, Regions.USEAST1); CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( context, developerProvider, Regions.USEAST1);
catatan

Versi AWS SDK untuk Android yang lebih lama (2.x dan sebelumnya) digunakan cognito-identity.amazonaws.com sebagai nama penyedia internal untuk identitas yang diautentikasi pengembang. Jika kumpulan identitas Anda berada di Wilayah baru yang menggunakan penerbit regional, tingkatkan ke versi SDK saat ini. Untuk informasi selengkapnya, lihat Format penerbit token regional.

iOS - Objektif-C

Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. AWSCognitoCredentialsProviderHelper Kelas penyedia identitas Anda harus mengembalikan objek respons yang berisi token sebagai atribut.

@implementation DeveloperAuthenticatedIdentityProvider /* * Use the token method to communicate with your backend to get an * identityId and token. */ - (AWSTask <NSString*> *) token { //Write code to call your backend: //Pass username/password to backend or some sort of token to authenticate user //If successful, from backend call getOpenIdTokenForDeveloperIdentity with logins map //containing "your.provider.name":"enduser.username" //Return the identity id and token to client //You can use AWSTaskCompletionSource to do this asynchronously // Set the identity id and return the token self.identityId = response.identityId; return [AWSTask taskWithResult:response.token]; } @end

Untuk menggunakan penyedia identitas ini, teruskan itu ke AWSCognitoCredentialsProvider seperti yang ditunjukkan dalam contoh berikut:

DeveloperAuthenticatedIdentityProvider * devAuth = [[DeveloperAuthenticatedIdentityProvider alloc] initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION identityPoolId:@"YOUR_IDENTITY_POOL_ID" useEnhancedFlow:YES identityProviderManager:nil]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION identityProvider:devAuth];

Jika Anda ingin mendukung identitas yang tidak diautentikasi dan identitas yang diautentikasi pengembang, ganti metode dalam implementasi Anda. logins AWSCognitoCredentialsProviderHelper

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins { if(/*logic to determine if user is unauthenticated*/) { return [AWSTask taskWithResult:nil]; }else{ return [super logins]; } }

Jika Anda ingin mendukung identitas dan penyedia sosial yang diautentikasi pengembang, Anda harus mengelola siapa penyedia saat ini dalam implementasi Anda. logins AWSCognitoCredentialsProviderHelper

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins { if(/*logic to determine if user is unauthenticated*/) { return [AWSTask taskWithResult:nil]; }else if (/*logic to determine if user is Facebook*/){ return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : [FBSDKAccessToken currentAccessToken] }]; }else { return [super logins]; } }
catatan

Versi AWS SDK untuk iOS yang lebih lama (2.x dan sebelumnya) digunakan cognito-identity.amazonaws.com sebagai nama penyedia internal untuk identitas yang diautentikasi pengembang. Jika kumpulan identitas Anda berada di Wilayah baru yang menggunakan penerbit regional, tingkatkan ke versi SDK saat ini. Untuk informasi selengkapnya, lihat Format penerbit token regional.

iOS - cepat

Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. AWSCognitoCredentialsProviderHelper Kelas penyedia identitas Anda harus mengembalikan objek respons yang berisi token sebagai atribut.

import AWSCore /* * Use the token method to communicate with your backend to get an * identityId and token. */ class DeveloperAuthenticatedIdentityProvider : AWSCognitoCredentialsProviderHelper { override func token() -> AWSTask<NSString> { //Write code to call your backend: //pass username/password to backend or some sort of token to authenticate user, if successful, //from backend call getOpenIdTokenForDeveloperIdentity with logins map containing "your.provider.name":"enduser.username" //return the identity id and token to client //You can use AWSTaskCompletionSource to do this asynchronously // Set the identity id and return the token self.identityId = resultFromAbove.identityId return AWSTask(result: resultFromAbove.token) }

Untuk menggunakan penyedia identitas ini, teruskan itu ke AWSCognitoCredentialsProvider seperti yang ditunjukkan dalam contoh berikut:

let devAuth = DeveloperAuthenticatedIdentityProvider(regionType: .YOUR_IDENTITY_POOL_REGION, identityPoolId: "YOUR_IDENTITY_POOL_ID", useEnhancedFlow: true, identityProviderManager:nil) let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .YOUR_IDENTITY_POOL_REGION, identityProvider:devAuth) let configuration = AWSServiceConfiguration(region: .YOUR_IDENTITY_POOL_REGION, credentialsProvider:credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration

Jika Anda ingin mendukung identitas yang tidak diautentikasi dan identitas yang diautentikasi pengembang, ganti metode dalam implementasi Anda. logins AWSCognitoCredentialsProviderHelper

override func logins () -> AWSTask<NSDictionary> { if(/*logic to determine if user is unauthenticated*/) { return AWSTask(result:nil) }else { return super.logins() } }

Jika Anda ingin mendukung identitas dan penyedia sosial yang diautentikasi pengembang, Anda harus mengelola siapa penyedia saat ini dalam implementasi Anda. logins AWSCognitoCredentialsProviderHelper

override func logins () -> AWSTask<NSDictionary> { if(/*logic to determine if user is unauthenticated*/) { return AWSTask(result:nil) }else if (/*logic to determine if user is Facebook*/){ if let token = AccessToken.current?.authenticationToken { return AWSTask(result: [AWSIdentityProviderFacebook:token]) } return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"])) }else { return super.logins() } }

JavaScript

Setelah Anda mendapatkan ID identitas dan token sesi dari backend Anda, Anda akan meneruskannya ke AWS.CognitoIdentityCredentials penyedia. Kunci login harus sesuai dengan iss klaim token. Untuk kumpulan identitas di Wilayah yang menggunakan penerbit global, gunakancognito-identity.amazonaws.com. Untuk kumpulan identitas di Wilayah lain, gunakancognito-identity.region.amazonaws.com. Untuk informasi selengkapnya, lihat Format penerbit token regional.

const token = 'TOKEN_RETURNED_FROM_YOUR_PROVIDER'; // Extract the issuer from the token const payload = token.split('.')[1]; const claims = JSON.parse(Buffer.from(payload, 'base64url').toString()); const providerName = claims.iss; AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', IdentityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER', Logins: { [providerName]: token } });

Unity

Untuk menggunakan identitas yang diautentikasi pengembang, Anda harus memperluas CognitoAWSCredentials dan mengganti RefreshIdentity metode untuk mengambil id identitas pengguna dan token dari backend Anda dan mengembalikannya. Berikut ini adalah contoh sederhana dari penyedia identitas yang akan menghubungi backend hipotetis di 'example.com':

using UnityEngine; using System.Collections; using Amazon.CognitoIdentity; using System.Collections.Generic; using ThirdParty.Json.LitJson; using System; using System.Threading; public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials { const string PROVIDER_NAME = "example.com"; const string IDENTITY_POOL = "IDENTITY_POOL_ID"; static readonly RegionEndpoint REGION = RegionEndpoint.USEast1; private string login = null; public DeveloperAuthenticatedCredentials(string loginAlias) : base(IDENTITY_POOL, REGION) { login = loginAlias; } protected override IdentityState RefreshIdentity() { IdentityState state = null; ManualResetEvent waitLock = new ManualResetEvent(false); MainThreadDispatcher.ExecuteCoroutineOnMainThread(ContactProvider((s) => { state = s; waitLock.Set(); })); waitLock.WaitOne(); return state; } IEnumerator ContactProvider(Action<IdentityState> callback) { WWW www = new WWW("http://example.com/?username="+login); yield return www; string response = www.text; JsonData json = JsonMapper.ToObject(response); //The backend has to send us back an Identity and a OpenID token string identityId = json["IdentityId"].ToString(); string token = json["Token"].ToString(); IdentityState state = new IdentityState(identityId, PROVIDER_NAME, token, false); callback(state); } }

Kode di atas menggunakan objek operator thread untuk memanggil coroutine. Jika Anda tidak memiliki cara untuk melakukan ini di proyek Anda, Anda dapat menggunakan skrip berikut dalam scene Anda:

using System; using UnityEngine; using System.Collections; using System.Collections.Generic; public class MainThreadDispatcher : MonoBehaviour { static Queue<IEnumerator> _coroutineQueue = new Queue<IEnumerator>(); static object _lock = new object(); public void Update() { while (_coroutineQueue.Count > 0) { StartCoroutine(_coroutineQueue.Dequeue()); } } public static void ExecuteCoroutineOnMainThread(IEnumerator coroutine) { lock (_lock) { _coroutineQueue.Enqueue(coroutine); } } }

Xamarin

Untuk menggunakan identitas yang diautentikasi pengembang, Anda harus memperluas CognitoAWSCredentials dan mengganti RefreshIdentity metode untuk mengambil id identitas pengguna dan token dari backend Anda dan mengembalikannya. Berikut ini adalah contoh dasar penyedia identitas yang akan menghubungi backend hipotetis di 'example.com':

public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials { const string PROVIDER_NAME = "example.com"; const string IDENTITY_POOL = "IDENTITY_POOL_ID"; static readonly RegionEndpoint REGION = RegionEndpoint.USEast1; private string login = null; public DeveloperAuthenticatedCredentials(string loginAlias) : base(IDENTITY_POOL, REGION) { login = loginAlias; } protected override async Task<IdentityState> RefreshIdentityAsync() { IdentityState state = null; //get your identity and set the state return state; } }

Memperbarui peta login (hanya Android dan iOS)

Android

Setelah berhasil mengotentikasi pengguna dengan sistem otentikasi Anda, perbarui peta login dengan nama penyedia pengembang dan pengenal pengguna pengembang. Ini adalah string alfanumerik yang secara unik mengidentifikasi pengguna dalam sistem otentikasi Anda. Pastikan untuk memanggil metode refresh setelah memperbarui peta login sebagai identityId mungkin telah berubah:

HashMap<String, String> loginsMap = new HashMap<String, String>(); loginsMap.put(developerAuthenticationProvider.getProviderName(), developerUserIdentifier); credentialsProvider.setLogins(loginsMap); credentialsProvider.refresh();

iOS - Objektif-C

SDK iOS hanya memanggil metode logins untuk mendapatkan peta login terbaru jika tidak ada kredensial atau kredensial telah kedaluwarsa. Jika Anda ingin memaksa SDK untuk mendapatkan kredenSIAL baru (misalnya, pengguna akhir Anda berubah dari tidak diautentikasi menjadi diautentikasi dan Anda ingin kredentif terhadap pengguna yang diautentikasi), panggil Anda. clearCredentials credentialsProvider

[credentialsProvider clearCredentials];

iOS - cepat

SDK iOS hanya memanggil metode logins untuk mendapatkan peta login terbaru jika tidak ada kredensial atau kredensial telah kedaluwarsa. Jika Anda ingin memaksa SDK untuk mendapatkan kredensial baru (misalnya, pengguna akhir Anda beralih dari tidak diautentikasi menjadi diautentikasi dan Anda ingin kredensial terhadap pengguna yang diautentikasi), panggil clearCredentials di credentialsProvider Anda.

credentialsProvider.clearCredentials()

Mendapatkan token (sisi server)

Anda mendapatkan token dengan menelepon GetOpenIdTokenForDeveloperIdentity. API ini harus dipanggil dari backend Anda menggunakan kredentif AWS pengembang. Itu tidak boleh dipanggil dari SDK klien. API menerima ID kumpulan identitas Cognito; peta login yang berisi nama penyedia identitas Anda sebagai kunci dan pengidentifikasi sebagai nilai; dan secara opsional ID identitas Cognito (misalnya, Anda membuat pengguna yang tidak diautentikasi diautentikasi diautentikasi). Pengidentifikasi dapat berupa nama pengguna dari pengguna Anda, alamat email, atau nilai numerik. API merespons panggilan Anda dengan ID Cognito unik untuk pengguna Anda dan token OpenID Connect untuk pengguna akhir.

Beberapa hal yang perlu diingat tentang token yang dikembalikan oleh GetOpenIdTokenForDeveloperIdentity:

  • Anda dapat menentukan waktu kedaluwarsa kustom untuk token sehingga Anda dapat men-cache token itu. Jika Anda tidak memberikan waktu kedaluwarsa kustom, token ini berlaku selama 15 menit.

  • Durasi token maksimum yang dapat Anda tetapkan adalah 24 jam.

  • Berhati-hati terhadap implikasi keamanan dari meningkatkan durasi token. Jika penyerang memperoleh token ini, mereka dapat menukarnya dengan AWS kredenSIAL untuk pengguna akhir selama durasi token.

Cuplikan Java berikut menunjukkan cara menginisialisasi klien Amazon Cognito dan mengambil token untuk identitas yang diautentikasi pengembang.

// authenticate your end user as appropriate // .... // if authenticated, initialize a cognito client with your AWS developer credentials AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient( new BasicAWSCredentials("access_key_id", "secret_access_key") ); // create a new request to retrieve the token for your end user GetOpenIdTokenForDeveloperIdentityRequest request = new GetOpenIdTokenForDeveloperIdentityRequest(); request.setIdentityPoolId("YOUR_COGNITO_IDENTITY_POOL_ID"); request.setIdentityId("YOUR_COGNITO_IDENTITY_ID"); //optional, set this if your client has an //identity ID that you want to link to this //developer account // set up your logins map with the username of your end user HashMap<String,String> logins = new HashMap<>(); logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER"); request.setLogins(logins); // optionally set token duration (in seconds) request.setTokenDuration(60 * 15l); GetOpenIdTokenForDeveloperIdentityResult response = identityClient.getOpenIdTokenForDeveloperIdentity(request); // obtain identity id and token to return to your client String identityId = response.getIdentityId(); String token = response.getToken(); //code to return identity id and token to client //...

Mengikuti langkah-langkah sebelumnya, Anda harus dapat mengintegrasikan identitas yang diautentikasi pengembang di aplikasi Anda. Jika Anda memiliki masalah atau pertanyaan, jangan ragu untuk memposting di forum kami.

Format penerbit token regional

Token OpenID Connect yang dikembalikan oleh GetOpenIdTokenForDeveloperIdentity berisi klaim iss (penerbit). Format klaim ini tergantung pada Wil AWS ayah dari kumpulan identitas.

Saat Anda memang GetCredentialsForIdentity gil (aliran yang ditingkatkan), kunci peta login harus sama persis dengan iss klaim token.

Penerbit Token menurut Wilayah

Nilai penerbit token tergantung pada Wilayah kumpulan identitas Anda.

  • Wilayah yang menggunakan penerbit global (us-east-1, us-east-2, us-west-1, us-west-2, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, eu-central-1, eu-north-1, eu-west-1, eu-west-2, eu-west-3, sa-east-1): cognito-identity.amazonaws.com

  • Wilayah China (cn-utara-1): cognito-identity---cn-north-1.amazonaws.com.rproxy.goskope.com.cn

  • Semua Wil AWS ayah komersial yang tersisa: cognito-identity.region.amazonaws.com

Menentukan kunci login secara terprogram

Daripada hardcoding kunci login, Anda dapat mengekstraknya dari token:

Java
import java.util.Base64; import org.json.JSONObject; String[] parts = token.split("\\."); String payload = new String(Base64.getUrlDecoder().decode(parts[1])); String issuer = new JSONObject(payload).getString("iss"); // Use 'issuer' as the logins map key in GetCredentialsForIdentity
Python
import base64, json payload = token.split('.')[1] # Add padding if needed payload += '=' * (4 - len(payload) % 4) claims = json.loads(base64.urlsafe_b64decode(payload)) issuer = claims['iss'] # Use 'issuer' as the logins map key
JavaScript
const payload = token.split('.')[1]; const claims = JSON.parse(Buffer.from(payload, 'base64url').toString()); const issuer = claims.iss; // Use 'issuer' as the logins map key

Pertimbangan migrasi

Jika Anda memigrasikan kumpulan identitas ke Wilayah yang menggunakan penerbit regional, perhatikan hal berikut:

  1. Klien yang melakukan hardcode cognito-identity.amazonaws.com sebagai kunci login akan gagal melawan kumpulan identitas Wilayah baru.

  2. Kode klien harus diperbarui untuk menggunakan penerbit regional (cognito-identity.new-region.amazonaws.com), atau untuk membaca iss klaim secara dinamis dari token (disarankan).

  3. Versi lama dari AWS Mobile SDK hardcode penerbit global. Ini termasuk AWS SDK untuk Android 2.x dan versi sebelumnya, dan AWS SDK untuk iOS 2.x dan versi sebelumnya. Jika kumpulan identitas Anda menggunakan penerbit regional, tingkatkan ke versi SDK saat ini.

Terhubung ke identitas sosial yang ada

Semua penautan penyedia saat Anda menggunakan identitas yang diautentikasi pengembang harus dilakukan dari backend Anda. Untuk menghubungkan identitas khusus ke identitas sosial pengguna (Masuk dengan Amazon, Masuk dengan Apple, Facebook, atau Google), tambahkan token penyedia identitas ke peta login saat Anda menelep GetOpenIdTokenForDeveloperIdentity on. Untuk membuat ini mungkin, ketika Anda memanggil backend Anda dari SDK klien Anda untuk mengautentikasi pengguna akhir Anda, berikan secara tambahan token penyedia sosial pengguna akhir.

Misalnya, jika Anda mencoba untuk menautkan identitas kustom ke Facebook, Anda akan menambahkan token Facebook selain pengidentifikasi penyedia identitas Anda ke peta login ketika Anda memanggil GetOpenIdTokenForDeveloperIdentity.

logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER"); logins.put("graph.facebook.com","END_USERS_FACEBOOK_ACCESSTOKEN");

Mendukung transisi antar penyedia

Android

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login dengan Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan mendasar antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara IdentityID dan token diperoleh. Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Jadi aplikasi seluler harus dapat mendukung dua alur berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas khusus.

refreshMetode ini memeriksa peta login. Jika peta tidak kosong dan memiliki kunci dengan nama penyedia pengembang, maka panggil backend Anda. Jika tidak, panggil IdentityId metode get dan kembalikan null.

public String refresh() { setToken(null); // If the logins map is not empty make a call to your backend // to get the token and identityId if (getProviderName() != null && !this.loginsMap.isEmpty() && this.loginsMap.containsKey(getProviderName())) { /** * This is where you would call your backend **/ // now set the returned identity id and token in the provider update(identityId, token); return token; } else { // Call getIdentityId method and return null this.getIdentityId(); return null; } }

Demikian pula metode getIdentityId akan memiliki dua alur tergantung pada isi dari peta login:

public String getIdentityId() { // Load the identityId from the cache identityId = cachedIdentityId; if (identityId == null) { // If the logins map is not empty make a call to your backend // to get the token and identityId if (getProviderName() != null && !this.loginsMap.isEmpty() && this.loginsMap.containsKey(getProviderName())) { /** * This is where you would call your backend **/ // now set the returned identity id and token in the provider update(identityId, token); return token; } else { // Otherwise call &COG; using getIdentityId of super class return super.getIdentityId(); } } else { return identityId; } }

iOS - Objektif-C

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login dengan Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Untuk melakukan ini, ganti AWSCognitoCredentialsProviderHelper logins metode untuk dapat mengembalikan peta login yang benar berdasarkan penyedia identitas saat ini. Contoh ini menunjukkan kepada Anda bagaimana Anda dapat berputar antara yang tidak diautentikasi, Facebook, dan yang diautentikasi pengembang.

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins { if(/*logic to determine if user is unauthenticated*/) { return [AWSTask taskWithResult:nil]; }else if (/*logic to determine if user is Facebook*/){ return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : [FBSDKAccessToken currentAccessToken] }]; }else { return [super logins]; } }

Ketika Anda beralih dari tidak diautentikasi ke diautentikasi, Anda harus memanggil [credentialsProvider clearCredentials]; untuk memaksa SDK untuk mendapatkan kredensial baru yang diautentikasi. Ketika Anda beralih di antara dua penyedia yang diautentikasi dan Anda tidak mencoba menautkan kedua penyedia (misalnya, Anda tidak menyediakan token untuk beberapa penyedia di kamus login Anda), hubungi. [credentialsProvider clearKeychain]; Ini akan menghapus baik kredensial dan identitas dan memaksa SDK untuk mendapatkan yang baru.

iOS - cepat

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login dengan Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Untuk melakukan ini, ganti AWSCognitoCredentialsProviderHelper logins metode untuk dapat mengembalikan peta login yang benar berdasarkan penyedia identitas saat ini. Contoh ini menunjukkan kepada Anda bagaimana Anda dapat berputar antara yang tidak diautentikasi, Facebook, dan yang diautentikasi pengembang.

override func logins () -> AWSTask<NSDictionary> { if(/*logic to determine if user is unauthenticated*/) { return AWSTask(result:nil) }else if (/*logic to determine if user is Facebook*/){ if let token = AccessToken.current?.authenticationToken { return AWSTask(result: [AWSIdentityProviderFacebook:token]) } return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"])) }else { return super.logins() } }

Ketika Anda beralih dari tidak diautentikasi ke diautentikasi, Anda harus memanggil credentialsProvider.clearCredentials() untuk memaksa SDK untuk mendapatkan kredensial baru yang diautentikasi. Ketika Anda beralih di antara dua penyedia yang diautentikasi dan Anda tidak mencoba menautkan kedua penyedia tersebut (yaitu Anda tidak menyediakan token untuk beberapa penyedia dalam kamus login Anda), Anda harus memanggil credentialsProvider.clearKeychain(). Ini akan menghapus baik kredensial dan identitas dan memaksa SDK untuk mendapatkan yang baru.

Unity

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login dengan Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan mendasar antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara IdentityID dan token diperoleh. Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Aplikasi seluler harus dapat mendukung dua alur yang berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas kustom.

Cara yang disarankan untuk melakukannya di Unity adalah dengan memperluas penyedia identitas Anda dari alih- AmazonCognitoEnhancedIdentityProvide alih AbstractCognitoIdentityProvider, dan memanggil RefreshAsync metode induk alih-alih metode Anda sendiri jika pengguna tidak diautentikasi dengan backend Anda sendiri. Jika pengguna diautentikasi, Anda dapat menggunakan alur yang sama yang dijelaskan sebelumnya.

Xamarin

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login dengan Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan mendasar antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara IdentityID dan token diperoleh. Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Aplikasi seluler harus dapat mendukung dua alur yang berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas khusus.