Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Identitas yang diautentikasi pengembang
Amazon Cognito mendukung identitas yang diautentikasi pengembang, selain federasi identitas web melalui,,, dan. Menyiapkan Facebook sebagai kumpulan identitas IDP 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 mengautentikasi pengguna melalui proses autentikasi 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 autentikasi, dan Amazon Cognito. Untuk detail selengkapnya, lihat Memahami Otentikasi Amazon Cognito Bagian 2: Identitas Terautentikasi Pengembang
Memahami alur otentikasi
GetOpenIdTokenForDeveloperIdentityAPIOperasi ini dapat memulai otentikasi pengembang untuk otentikasi yang ditingkatkan dan dasar. Ini API mengautentikasi permintaan dengan kredensi administratif. Logins
Peta adalah nama penyedia pengembang kumpulan identitas seperti login.mydevprovider
dipasangkan dengan pengenal kustom.
Contoh:
"Logins": { "login.mydevprovider": "my developer identifier" }
Otentikasi yang disempurnakan
Panggil GetCredentialsForIdentityAPIoperasi dengan Logins
peta dengan nama cognito-identity.amazonaws.com
dan nilai token dariGetOpenIdTokenForDeveloperIdentity
.
Contoh:
"Logins": { "cognito-identity.amazonaws.com": "eyJra12345EXAMPLE" }
GetCredentialsForIdentity
dengan identitas yang diautentikasi pengembang mengembalikan kredensitas sementara untuk peran default yang diautentikasi dari kumpulan identitas.
Otentikasi dasar
Panggil AssumeRoleWithWebIdentityAPIoperasi dan minta IAM peran apa pun yang memiliki hubungan kepercayaan yang sesuai yang ditentukan. RoleArn
Tetapkan nilai WebIdentityToken
ke 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 khusus
-
Pilih kumpulan Identitas dari konsol Amazon Cognito
. Pilih kumpulan identitas. -
Pilih tab Akses pengguna.
-
Pilih Tambahkan penyedia identitas.
-
Pilih Penyedia pengembang khusus.
-
Masukkan nama penyedia Pengembang. Anda tidak dapat mengubah atau menghapus penyedia pengembang setelah menambahkannya.
-
Pilih Simpan perubahan.
Catatan: Setelah nama penyedia telah diatur, itu tidak dapat diubah.
Untuk arahan tambahan mengenai bekerja dengan Konsol Amazon Cognito, lihat Menggunakan konsol Amazon Cognito.
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);
iOS - Objektif-C
Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. AWSCognitoCredentialsProviderHelper
@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]; } }
iOS - cepat
Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. AWSCognitoCredentialsProviderHelper
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 penyedia. AWS.CognitoIdentityCredentials
Inilah contohnya.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', IdentityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER', Logins: { 'cognito-identity.amazonaws.com': 'TOKEN_RETURNED_FROM_YOUR_PROVIDER' } });
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 dari 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 mengautentikasi 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
iOS SDK hanya memanggil logins
metode Anda untuk mendapatkan peta login terbaru jika tidak ada kredensi atau telah kedaluwarsa. Jika Anda ingin memaksa SDK untuk mendapatkan kredensi baru (misalnya, pengguna akhir Anda beralih dari tidak diautentikasi ke otentikasi dan Anda ingin kredensitas terhadap pengguna yang diautentikasi), hubungi Anda. clearCredentials
credentialsProvider
[credentialsProvider clearCredentials];
iOS - cepat
iOS SDK hanya memanggil logins
metode Anda untuk mendapatkan peta login terbaru jika tidak ada kredensi atau telah kedaluwarsa. Jika Anda ingin memaksa SDK untuk mendapatkan kredensi baru (misalnya, pengguna akhir Anda beralih dari tidak diautentikasi ke otentikasi dan Anda ingin kredensitas terhadap pengguna yang diautentikasi), hubungi Anda. clearCredentials
credentialsProvider
credentialsProvider.clearCredentials()
Mendapatkan token (sisi server)
Anda mendapatkan token dengan menelepon GetOpenIdTokenForDeveloperIdentity. Ini API harus dipanggil dari backend Anda menggunakan AWS kredensi pengembang. Itu tidak boleh dipanggil dari klienSDK. ID kumpulan identitas Cognito API menerima; peta login yang berisi nama penyedia identitas Anda sebagai kunci dan pengenal sebagai nilai; dan secara opsional ID identitas Cognito (misalnya, Anda membuat pengguna yang tidak diautentikasi diautentikasi). Pengidentifikasi dapat berupa nama pengguna dari pengguna Anda, alamat email, atau nilai numerik. APIRespons 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 atur adalah 24 jam.
-
Berhati-hati terhadap implikasi keamanan dari meningkatkan durasi token. Jika penyerang memperoleh token ini, mereka dapat menukarnya dengan AWS kredensi 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
Connect ke identitas sosial yang ada
Semua penautan penyedia ketika Anda menggunakan identitas yang diautentikasi pengembang harus dilakukan dari backend Anda. Untuk menghubungkan identitas kustom ke identitas sosial pengguna (Login with Amazon, Masuk dengan Apple, Facebook, atau Google), tambahkan token penyedia identitas ke peta login saat Anda menelepon GetOpenIdTokenForDeveloperIdentity. Untuk memungkinkan hal ini, ketika Anda memanggil backend Anda dari klien Anda SDK untuk mengautentikasi pengguna akhir Anda, berikan juga 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 with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan penting antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara token dan diperoleh. identityId 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.
refresh
Metode ini memeriksa peta login. Jika peta tidak kosong dan memiliki kunci dengan nama penyedia pengembang, maka panggil backend Anda. Jika tidak, panggil getIdentityId metode 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 with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Untuk melakukan ini, ganti AWSCognitoCredentialsProviderHelperlogins
metode untuk dapat mengembalikan peta login yang benar berdasarkan penyedia identitas saat ini. Contoh ini menunjukkan kepada Anda bagaimana Anda dapat berputar antara tidak diautentikasi, Facebook, dan yang diautentikasi oleh 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 bertransisi dari tidak diautentikasi ke otentikasi, Anda harus memanggil [credentialsProvider clearCredentials];
untuk memaksa untuk mendapatkan kredensi baru yang SDK 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 kredensi 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 with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Untuk melakukan ini, ganti AWSCognitoCredentialsProviderHelperlogins
metode untuk dapat mengembalikan peta login yang benar berdasarkan penyedia identitas saat ini. Contoh ini menunjukkan kepada Anda bagaimana Anda dapat berputar antara tidak diautentikasi, Facebook, dan yang diautentikasi oleh 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 bertransisi dari tidak diautentikasi ke otentikasi, Anda harus memanggil credentialsProvider.clearCredentials()
untuk memaksa untuk mendapatkan kredensi baru yang SDK 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 kredensi 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 with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan penting antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara token dan diperoleh. identityId Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Aplikasi seluler harus dapat mendukung dua aliran 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 AmazonCognitoEnhancedIdentityProvide alih-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 with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan penting antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara token dan diperoleh. identityId Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Aplikasi seluler harus dapat mendukung dua aliran berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas khusus.