Entwicklerauthentifizierte Identitäten (Identitätspools) - Amazon Cognito

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.

Entwicklerauthentifizierte Identitäten (Identitätspools)

Amazon Cognito unterstützt entwicklerauthentifizierte Identitäten zusätzlich zum Web-Identitätsverbund über Facebook als Identitätspools einrichten (IdP), Google als Identitätspool-IdP einrichten, Login with Amazon als Identitätspools (IdP) einrichten und Mit Apple anmelden als Identitätspool-IdP einrichten. Mit entwicklerauthentifizierten Identitäten können Sie Benutzer über Ihren eigenen vorhandenen Authentifizierungsprozess registrieren und authentifizieren und weiterhin Amazon Cognito verwenden, um Benutzerdaten zu synchronisieren und auf AWS Ressourcen zuzugreifen. Die Verwendung von entwicklerauthentifizierten Identitäten beinhaltet die Interaktion zwischen dem Endbenutzergerät, Ihrem Backend für die Authentifizierung und Amazon Cognito. Weitere Informationen finden Sie unter Grundlegendes zur Amazon Cognito-Authentifizierung, Teil 2: Entwicklerauthentifizierte Identitäten im - AWS Blog.

Erläuterungen zum Authentifizierungsfluss

Der GetOpenIdTokenForDeveloperIdentity API-Vorgang kann die Entwicklerauthentifizierung sowohl für die erweiterte als auch für die grundlegende Authentifizierung initiieren. Diese API authentifiziert eine Anforderung mit Administratoranmeldeinformationen. Die Logins Zuordnung ist ein Name eines Identitätspool-Entwickleranbieters wie login.mydevprovider in Kombination mit einer benutzerdefinierten Kennung.

Beispiel:

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

Erweiterte Authentifizierung

Rufen Sie die GetCredentialsForIdentity API-Operation mit einer Logins Zuordnung mit dem Namen cognito-identity.amazonaws.com und einem Wert des Tokens aus aufGetOpenIdTokenForDeveloperIdentity.

Beispiel:

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

GetCredentialsForIdentity mit entwicklerauthentifizierten Identitäten gibt temporäre Anmeldeinformationen für die standardmäßig authentifizierte Rolle des Identitätspools zurück.

Basisauthentifizierung

Rufen Sie die AssumeRoleWithWebIdentity -API-Operation auf und fordern Sie die RoleArn aller IAM-Rollen an, für die eine entsprechende Vertrauensstellung definiert ist. Setzen Sie den Wert von WebIdentityToken auf das Token, das Sie von erhalten habenGetOpenIdTokenForDeveloperIdentity.

Informationen zum Authentifizierungsablauf für entwicklerauthentifizierte Identitäten und dazu, wie sie sich von Identitäten externer Anbieter unterscheiden, finden Sie unter Identitäten-Pools (Verbundidentitäten) – Authentifizierungsablauf.

Definieren eines Entwickleranbieternamens und Zuordnen zu einem Identitäten-Pool

Zur Verwendung von entwicklerauthentifizierten Identitäten muss dem Entwickleranbieter ein Identitätspool zugeordnet werden. Führen Sie dazu die folgenden Schritte aus:

So fügen Sie einen benutzerdefinierten Entwickleranbieter hinzu
  1. Wählen Sie Identitätspools in der Amazon-Cognito-Konsole aus. Wählen Sie einen Identitätspool.

  2. Wählen Sie die Registerkarte Datenzugriff aus.

  3. Wählen Sie Identitätsanbieter hinzufügen aus.

  4. Wählen Sie Benutzerdefinierter Entwickleranbieter aus.

  5. Geben Sie einen Namen für den Entwickleranbieter ein. Wenn Sie Ihren Entwickleranbieter eingegeben haben, können Sie ihn nicht mehr ändern oder löschen.

  6. Wählen Sie Änderungen speichern aus.

Hinweis: Sobald der Anbieternamen festgelegt wurde, kann er nicht mehr geändert werden.

Weitere Anweisungen zur Verwendung der Amazon-Cognito-Konsole finden Sie unter Verwenden der Amazon-Cognito-Konsole.

Implementieren eines Identitätsanbieters

Android

Zur Verwendung von entwicklerauthentifizierten Identitäten implementieren Sie eine eigene Identitätsanbieterklasse, die AWSAbstractCognitoIdentityProvider erweitert. Die Identitätsanbieterklasse sollte ein Antwortobjekt zurückgeben, das das Token als Attribut enthält.

Es folgt ein einfaches Beispiel für einen Identitätsanbieter.

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

Zur Verwendung dieses Anbieters müssen Sie ihn an übergeben CognitoCachingCredentialsProvider. Ein Beispiel:

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

iOS – Objective-C

Zur Verwendung von entwicklerauthentifizierten Identitäten implementieren Sie eine eigene Identitätsanbieterklasse, die AWSCognitoCredentialsProviderHelper erweitert. Die Identitätsanbieterklasse sollte ein Antwortobjekt zurückgeben, das das Token als Attribut enthält.

@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

Zur Verwendung dieses Identitätsanbieters müssen Sie ihn wie in folgendem Beispiel gezeigt an AWSCognitoCredentialsProvider übergeben:

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

Wenn Sie sowohl nicht authentifizierte Identitäten als auch entwicklerauthentifizierte Identitäten unterstützen möchten, überschreiben Sie die Methode logins in der AWSCognitoCredentialsProviderHelper-Implementierung.

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

Wenn Sie sowohl entwicklerauthentifizierte Identitäten als auch Social-Identity-Anbieter unterstützen möchten, müssen Sie den verwendeten aktuellen Anbieter in der logins-Implementierung von AWSCognitoCredentialsProviderHelper verwalten.

- (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 – Swift

Zur Verwendung von entwicklerauthentifizierten Identitäten implementieren Sie eine eigene Identitätsanbieterklasse, die AWSCognitoCredentialsProviderHelper erweitert. Die Identitätsanbieterklasse sollte ein Antwortobjekt zurückgeben, das das Token als Attribut enthält.

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

Zur Verwendung dieses Identitätsanbieters müssen Sie ihn wie in folgendem Beispiel gezeigt an AWSCognitoCredentialsProvider übergeben:

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

Wenn Sie sowohl nicht authentifizierte Identitäten als auch entwicklerauthentifizierte Identitäten unterstützen möchten, überschreiben Sie die Methode logins in der AWSCognitoCredentialsProviderHelper-Implementierung.

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

Wenn Sie sowohl entwicklerauthentifizierte Identitäten als auch Social-Identity-Anbieter unterstützen möchten, müssen Sie den verwendeten aktuellen Anbieter in der logins-Implementierung von AWSCognitoCredentialsProviderHelper verwalten.

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

Nachdem Sie eine Identitäts-ID und ein Sitzungs-Token von Ihrem Backend erhalten haben, übergeben Sie diese an den AWS.CognitoIdentityCredentials-Anbieter. Ein Beispiel:

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

Zur Verwendung von entwicklerauthentifizierten Identitäten müssen Sie CognitoAWSCredentials erweitern und die Methode RefreshIdentity überschreiben, um die Benutzeridentitäts-ID und das Token vom Backend abzurufen und zurückzugeben. Nachstehend finden Sie ein einfaches Beispiel für einen Identitätsanbieter, der ein hypothetisches Backend unter „example.com“ kontaktiert:

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

Der obige Code verwendet ein Thread-Dispatcher-Objekt zum Aufrufen einer Coroutine. Wenn Sie in Ihrem Projekt nicht die Möglichkeit dazu haben, können Sie das folgende Skript in Ihren Szenen verwenden:

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

Zur Verwendung von entwicklerauthentifizierten Identitäten müssen Sie CognitoAWSCredentials erweitern und die Methode RefreshIdentity überschreiben, um die Benutzeridentitäts-ID und das Token vom Backend abzurufen und zurückzugeben. Nachstehend finden Sie ein einfaches Beispiel für einen Identitätsanbieter, der ein hypothetisches Backend unter „example.com“ kontaktiert:

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

Aktualisieren der Anmeldezuweisung (nur Android und iOS)

Android

Nach erfolgreicher Authentifizierung des Benutzers mit Ihrem Authentifizierungssystem aktualisieren Sie die Anmeldezuweisung mit dem Entwickleranbieter-Namen und einer Entwicklerbenutzer-ID. Dies ist eine alphanumerische Zeichenfolge, die einen Benutzer in Ihrem Authentifizierungssystem eindeutig identifiziert. Stellen Sie sicher, dass nach der Aktualisierung der Anmeldezuweisung die Methode refresh da die identityId sich möglicherweise geändert hat:

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

iOS – Objective-C

Das iOS-SDK ruft die Methode logins nur auf, um die aktuelle Anmeldezuweisung abzurufen, wenn keine Anmeldeinformationen vorliegen oder diese abgelaufen sind. Wenn Sie das Abrufen neuer Anmeldeinformationen im SDK erzwingen möchten (weil beispielsweise ein nicht authentifizierter Endbenutzer jetzt authentifiziert ist und Sie Anmeldeinformationen für den authentifizierten Benutzer benötigen), rufen Sie clearCredentials in credentialsProvider auf.

[credentialsProvider clearCredentials];

iOS – Swift

Das iOS-SDK ruft die Methode logins nur auf, um die aktuelle Anmeldezuweisung abzurufen, wenn keine Anmeldeinformationen vorliegen oder diese abgelaufen sind. Wenn Sie das Abrufen neuer Anmeldeinformationen im SDK erzwingen möchten (weil beispielsweise ein nicht authentifizierter Endbenutzer jetzt authentifiziert ist und Sie Anmeldeinformationen für den authentifizierten Benutzer benötigen), rufen Sie clearCredentials in credentialsProvider auf.

credentialsProvider.clearCredentials()

Aufrufen eines Tokens (Serverseite)

Sie erhalten ein Token, indem Sie aufrufenGetOpenIdTokenForDeveloperIdentity. Diese API muss von Ihrem Backend aus mit AWS Entwickleranmeldeinformationen aufgerufen werden. Sie darf nicht über das Client-SDK aufgerufen werden. Die API empfängt die Cognito-Identitätspool-ID, eine Anmeldezuweisung mit Ihrem Identitätsanbieter-Namen als Schlüssel und der ID als Wert sowie optional eine Cognito-Identitäts-ID (d. h. Sie ändern einen nicht authentifizierten in einen authentifizierten Benutzer). Die ID kann der Benutzername Ihres Benutzers, eine E-Mail-Adresse oder ein numerischer Wert sein. Die API beantwortet den Aufruf mit einer eindeutigen Cognito-ID für Ihren Benutzer und einem OpenID Connect-Token für den Endbenutzer.

Im Folgenden noch einige Hinweise zu dem durch zurückgegebenen Token GetOpenIdTokenForDeveloperIdentity:

  • Sie können eine benutzerdefinierte Ablaufzeit für das Token angeben, sodass Sie es zwischenspeichern können. Wenn Sie keine benutzerdefinierte Ablaufzeit bereitstellen, ist das Token für 15 Minuten gültig.

  • Die maximale Token-Dauer, die Sie festlegen können, ist 24 Stunden.

  • Beachten Sie, dass eine Verlängerung der Token-Dauer zu Sicherheitsproblemen führen kann. Wenn ein Angreifer dieses Token erhält, kann er es für die Token-Dauer gegen AWS Anmeldeinformationen für den Endbenutzer eintauschen.

Der folgende Java-Codeausschnitt zeigt, wie Sie einen Amazon-Cognito-Client initiieren und ein Token für eine entwicklerauthentifizierte Identität abrufen.

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

Nach den oben aufgeführten Schritten können Sie entwicklerauthentifizierte Identitäten in Ihre App integrieren. Bei Problemen oder Fragen können Sie gerne einen Beitrag in unseren Foren posten.

Verbinden mit einer vorhandenen Social Identity

Alle Verknüpfungen von Anbietern müssen über Ihr Backend erfolgen, wenn Sie entwicklerauthentifizierte Identitäten verwenden. Um eine benutzerdefinierte Identität mit der Social Identity eines Benutzers (Login with Amazon, Mit Apple anmelden, Facebook oder Google) zu verbinden, fügen Sie das Identitätsanbieter-Token der Anmeldezuweisung hinzu, wenn Sie aufrufenGetOpenIdTokenForDeveloperIdentity. Um dies zu ermöglichen, müssen Sie zusätzlich das Token des Social-Identity-Anbieter an den Endbenutzer übergeben, wenn Sie das Backend zur Authentifizierung des Endbenutzers über das Client-SDK aufrufen.

Wenn Sie beispielsweise eine benutzerdefinierte Identität mit Facebook verknüpfen möchten, fügen Sie der Anmeldezuweisung beim Aufrufen von zusätzlich zu Ihrer Identitätsanbieter-ID das Facebook-Token hinzu GetOpenIdTokenForDeveloperIdentity.

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

Unterstützen des Anbieterwechsels

Android

Ihre Anwendung erfordert möglicherweise die Unterstützung sowohl von nicht authentifizierten Identitäten oder authentifizierten Identitäten unter Verwendung öffentlicher Anbieter (Anmeldung mit Amazon, Apple, Facebook oder Google) als auch von entwicklerauthentifizierten Identitäten. Der wesentliche Unterschied zwischen entwicklerauthentifizierten Identitäten und anderen Identitäten (nicht authentifizierten Identitäten und authentifizierten Identitäten unter Verwendung von öffentlichen Anbietern) ist die Art, in der die Identitäts-ID und das Token abgerufen werden. Für andere Identitäten interagiert die mobile Anwendung direkt mit Amazon Cognito, anstatt Ihr Authentifizierungssystem zu kontaktieren. Die mobile Anwendung muss daher in Abhängigkeit von der Auswahl durch den App-Benutzer zwei verschiedene Abläufe unterstützen können. Hierzu müssen Sie einige Änderungen am benutzerdefinierten Identitätsanbieter vornehmen.

Die refresh-Methode überprüft die Anmeldezuordnung. Ist diese nicht leer, sondern enthält einen Schlüssel mit dem Entwickleranbieter-Namen, müssen Sie Ihr Backend aufrufen. Rufen Sie andernfalls die getIdentityId Methode auf und geben Sie null zurück.

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

Entsprechend weist die Methode getIdentityId zwei Abläufe auf, die vom Inhalt der Anmeldezuweisung abhängen:

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 – Objective-C

Ihre Anwendung erfordert möglicherweise die Unterstützung sowohl von nicht authentifizierten Identitäten oder authentifizierten Identitäten unter Verwendung öffentlicher Anbieter (Anmeldung mit Amazon, Apple, Facebook oder Google) als auch von entwicklerauthentifizierten Identitäten. Überschreiben Sie dazu die -AWSCognitoCredentialsProviderHelperloginsMethode, um die richtige Anmeldezuweisung basierend auf dem aktuellen Identitätsanbieter zurückgeben zu können. Das folgende Beispiel zeigt, wie Sie zwischen einer authentifizierten Identität, Facebook und einer entwicklerauthentifizierten Identität wechseln können.

- (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]; } }

Beim Wechsel von einem nicht authentifizierten zu einem authentifizierten Anbieter müssen Sie [credentialsProvider clearCredentials]; aufrufen und so erzwingen, dass das SDK die neuen authentifizierten Anmeldeinformationen abruft. Wenn Sie zwischen zwei authentifizierten Anbietern wechseln und nicht versuchen, die beiden Anbieter zu verknüpfen (d. h. Sie stellen im Anmeldeverzeichnis keine Token für mehrere Anbieter bereit), müssen Sie [credentialsProvider clearKeychain]; aufrufen. Dadurch werden sowohl die Anmeldeinformationen als auch die Identität gelöscht und das SDK ruft neue Informationen ab.

iOS – Swift

Ihre Anwendung erfordert möglicherweise die Unterstützung sowohl von nicht authentifizierten Identitäten oder authentifizierten Identitäten unter Verwendung öffentlicher Anbieter (Anmeldung mit Amazon, Apple, Facebook oder Google) als auch von entwicklerauthentifizierten Identitäten. Überschreiben Sie dazu die -AWSCognitoCredentialsProviderHelperloginsMethode, um die richtige Anmeldezuweisung basierend auf dem aktuellen Identitätsanbieter zurückgeben zu können. Das folgende Beispiel zeigt, wie Sie zwischen einer authentifizierten Identität, Facebook und einer entwicklerauthentifizierten Identität wechseln können.

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

Beim Wechsel von einem nicht authentifizierten zu einem authentifizierten Anbieter müssen Sie credentialsProvider.clearCredentials() aufrufen und so erzwingen, dass das SDK die neuen authentifizierten Anmeldeinformationen abruft. Wenn Sie zwischen zwei authentifizierten Anbietern wechseln und nicht versuchen, die beiden Anbieter zu verknüpfen (d. h. Sie stellen im Anmeldeverzeichnis keine Token für mehrere Anbieter bereit), müssen Sie aufrufen credentialsProvider.clearKeychain(). Dadurch werden sowohl die Anmeldeinformationen als auch die Identität gelöscht und das SDK ruft neue Informationen ab.

Unity

Ihre Anwendung erfordert möglicherweise die Unterstützung sowohl von nicht authentifizierten Identitäten oder authentifizierten Identitäten unter Verwendung öffentlicher Anbieter (Anmeldung mit Amazon, Apple, Facebook oder Google) als auch von entwicklerauthentifizierten Identitäten. Der wesentliche Unterschied zwischen entwicklerauthentifizierten Identitäten und anderen Identitäten (nicht authentifizierten Identitäten und authentifizierten Identitäten unter Verwendung von öffentlichen Anbietern) ist die Art, in der die Identitäts-ID und das Token abgerufen werden. Für andere Identitäten interagiert die mobile Anwendung direkt mit Amazon Cognito, anstatt Ihr Authentifizierungssystem zu kontaktieren. Die mobile Anwendung muss daher je nach Auswahl durch den App-Benutzer zwei verschiedene Abläufe unterstützen können. Hierzu müssen Sie einige Änderungen am benutzerdefinierten Identitätsanbieter vornehmen.

Die empfohlene Methode, dies in Unity zu tun, besteht darin, Ihren Identitätsanbieter von AmazonCognitoEnhancedIdentityProvide anstelle von zu erweitern und die übergeordnete RefreshAsync Methode anstelle Ihrer eigenen Methode aufzurufen AbstractCognitoIdentityProvider, falls der Benutzer nicht über Ihr eigenes Backend authentifiziert ist. Wenn der Benutzer authentifiziert wurde, können Sie den gleichen Ablauf verwenden, der oben bereits erläutert wurde.

Xamarin

Ihre Anwendung erfordert möglicherweise die Unterstützung sowohl von nicht authentifizierten Identitäten oder authentifizierten Identitäten unter Verwendung öffentlicher Anbieter (Anmeldung mit Amazon, Apple, Facebook oder Google) als auch von entwicklerauthentifizierten Identitäten. Der wesentliche Unterschied zwischen entwicklerauthentifizierten Identitäten und anderen Identitäten (nicht authentifizierten Identitäten und authentifizierten Identitäten unter Verwendung von öffentlichen Anbietern) ist die Art, in der die Identitäts-ID und das Token abgerufen werden. Für andere Identitäten interagiert die mobile Anwendung direkt mit Amazon Cognito, anstatt Ihr Authentifizierungssystem zu kontaktieren. Die mobile Anwendung muss daher je nach Auswahl durch den App-Benutzer zwei verschiedene Abläufe unterstützen können. Hierzu müssen Sie einige Änderungen am benutzerdefinierten Identitätsanbieter vornehmen.