View a markdown version of this page

Developer-authenticated Identitäten - 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.

Developer-authenticated Identitäten

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 von Entwicklern authentifizierten Identitäten können Sie Benutzer über Ihren eigenen bestehenden Authentifizierungsprozess registrieren und authentifizieren und gleichzeitig Amazon Cognito verwenden, um Benutzerdaten zu synchronisieren und auf Ressourcen zuzugreifen. AWS Die Verwendung von vom Entwickler authentifizierten Identitäten erfordert eine Interaktion zwischen dem Endbenutzergerät, Ihrem Back-End für die Authentifizierung und Amazon Cognito. Weitere Informationen finden Sie im Blog unter Understanding Amazon Cognito Authentication Part 2: Developer Authenticated Identities. AWS

Erläuterungen zum Authentifizierungsfluss

Der GetOpenIdTokenForDeveloperIdentityAPI-Vorgang kann die Entwicklerauthentifizierung sowohl für die erweiterte als auch für die Standardauthentifizierung initiieren. Diese API authentifiziert eine Anfrage mit Administratoranmeldedaten. Bei der Logins Map handelt es sich um den Namen eines Entwickler-Providers für Identitätspools, login.mydevprovider gepaart mit einer benutzerdefinierten ID.

Beispiel:

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

Verbesserte Authentifizierung

Rufen Sie den GetCredentialsForIdentityAPI-Vorgang mit einer Logins Map auf, bei der der Schlüssel der Aussteller des von GetOpenIdTokenForDeveloperIdentity zurückgegebenen Tokens und der Wert das Token selbst ist.

Der Aussteller (und damit der erforderliche Anmeldeschlüssel) hängt von der Region Ihres Identitätspools ab. Die Token-Emittent nach Region vollständige Liste der Regionen und ihrer Token-Emittenten finden Sie unter.

Beispiel für einen Identitätspool in einer Region, der den globalen Emittenten verwendet:

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

Beispiel für einen Identitätspool in einer neueren Region (wie eu-south-2):

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

Der Zuordnungsschlüssel für die Anmeldung muss exakt mit dem Anspruch iss (des Ausstellers) im Token übereinstimmen. Wenn sie nicht übereinstimmen, GetCredentialsForIdentity wird Folgendes zurückgegeben: NotAuthorizedException: Invalid login token. Issuer doesn't match providerName

Tipp

Um den richtigen Anmeldeschlüssel programmgesteuert zu ermitteln, dekodieren Sie das Token (ein JWT) und lesen Sie den Claim-Wert. iss Verwenden Sie diesen Wert als Schlüssel für die Login-Zuordnung.

GetCredentialsForIdentitymit vom Entwickler authentifizierten Identitäten werden temporäre Anmeldeinformationen für die standardmäßige authentifizierte Rolle des Identitätspools zurückgegeben.

Grundlegende Authentifizierung

Rufen Sie den AssumeRoleWithWebIdentityAPI-Vorgang auf und fordern Sie eine beliebige IAM-Rolle RoleArn an, für die eine entsprechende Vertrauensbeziehung definiert wurde. Stellen Sie den Wert von WebIdentityToken auf das Token ein, von GetOpenIdTokenForDeveloperIdentity dem Sie abgerufen wurden.

Informationen zum Authflow für vom Entwickler authentifizierte Identitäten und wie sie sich von Identitäten externer Anbieter unterscheiden, finden Sie unter. Identitäten-Pools – Authentifzierungsablauf

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.

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", Regions.USEAST1); CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( context, developerProvider, Regions.USEAST1);
Anmerkung

Ältere Versionen des AWS SDK for Android (2.x und früher) verwenden cognito-identity.amazonaws.com den internen Anbieternamen für vom Entwickler authentifizierte Identitäten. Wenn sich Ihr Identitätspool in einer neueren Region befindet, die einen regionalisierten Emittenten verwendet, führen Sie ein Upgrade auf eine aktuelle SDK-Version durch. Weitere Informationen finden Sie unter Format des regionalen Token-Emittenten.

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

Ältere Versionen des AWS SDK for iOS (2.x und früher) verwenden cognito-identity.amazonaws.com als internen Anbieternamen für vom Entwickler authentifizierte Identitäten. Wenn sich Ihr Identitätspool in einer neueren Region befindet, die einen regionalisierten Emittenten verwendet, führen Sie ein Upgrade auf eine aktuelle SDK-Version durch. Weitere Informationen finden Sie unter Format des regionalen Token-Emittenten.

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

Sobald Sie eine Identitäts-ID und ein Sitzungstoken von Ihrem Backend erhalten haben, geben Sie diese an den fromCognitoIdentity Anbieter weiter. @aws-sdk/credential-providers Der Anmeldeschlüssel muss dem iss Anspruch des Tokens entsprechen. Verwenden Sie für Identitätspools in Regionen, die den globalen Emittenten verwenden. cognito-identity.amazonaws.com Verwenden cognito-identity.region.amazonaws.com Sie für Identitätspools in anderen Regionen. Weitere Informationen finden Sie unter Format des regionalen Token-Emittenten.

import { fromCognitoIdentity } from "@aws-sdk/credential-providers"; const token = 'TOKEN_RETURNED_FROM_YOUR_PROVIDER'; const region = 'IDENTITY_POOL_REGION'; // Extract the issuer from the token const payload = token.split('.')[1]; const claims = JSON.parse(Buffer.from(payload, 'base64url').toString()); const providerName = claims.iss; // Your backend already established the identity, so use fromCognitoIdentity // (which calls GetCredentialsForIdentity directly for the identity ID you pass) // rather than fromCognitoIdentityPool (which would call GetId and resolve a new identity). const credentials = fromCognitoIdentity({ identityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER', logins: { [providerName]: token }, clientConfig: { region } }); // Attach the provider to each service client that needs credentials. const client = new SomeServiceClient({ region, credentials });

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 anrufen GetOpenIdTokenForDeveloperIdentity. Diese API muss von Ihrem Backend aus mit AWS Entwickleranmeldedaten 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 Dauer des Tokens 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. Wenn Sie Probleme oder Fragen haben, posten Sie diese in unseren Foren.

Format des regionalen Token-Emittenten

Das von zurückgegebene OpenID Connect-Token GetOpenIdTokenForDeveloperIdentity enthält einen iss (Emittenten-) Anspruch. Das Format dieses Anspruchs hängt von der AWS Region des Identitätspools ab.

Wenn Sie aufrufen GetCredentialsForIdentity (erweiterter Ablauf), muss der Zuordnungsschlüssel für die Anmeldung genau dem iss Anspruch des Tokens entsprechen.

Token-Emittent nach Region

Der Wert des Token-Emittenten hängt von der Region Ihres Identitätspools ab.

  • Regionen, die den globalen Emittenten verwenden (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-1, eu-west-2, eu-west-3, sa-east-1): cognito-identity.amazonaws.com

  • Die China Regionen (cn-north-1): cognito-identity---cn-north-1.amazonaws.com.rproxy.govskope.ca.cn

  • Alle übrigen Handelsregionen: AWS cognito-identity.region.amazonaws.com

Programmgesteuertes Ermitteln des Login-Schlüssels

Anstatt den Anmeldeschlüssel fest zu codieren, können Sie ihn aus dem Token extrahieren:

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

Überlegungen zur Migration

Wenn Sie einen Identitätspool in eine Region migrieren, die einen regionalisierten Emittenten verwendet, sollten Sie Folgendes beachten:

  1. Clients, die cognito-identity.amazonaws.com als Anmeldeschlüssel hartcodieren, schlagen beim Zugriff auf den Identitätspool der neuen Region fehl.

  2. Der Kundencode muss aktualisiert werden, um den regionalisierten Emittenten (cognito-identity.new-region.amazonaws.com) zu verwenden oder den iss Anspruch dynamisch aus dem Token zu lesen (empfohlen).

  3. In älteren Versionen der AWS Mobile SDKs ist der globale Emittent fest codiert. Dazu gehören das AWS SDK for Android 2.x und früher und das AWS SDK for iOS 2.x und früher. Wenn Ihr Identitätspool einen regionalisierten Emittenten verwendet, führen Sie ein Upgrade auf eine aktuelle SDK-Version durch.

Verbinden mit einer vorhandenen Social Identity

Die gesamte Verknüpfung von Anbietern, wenn Sie vom Entwickler authentifizierte Identitäten verwenden, muss von Ihrem Backend aus erfolgen. Um eine benutzerdefinierte Identität mit der sozialen Identität eines Benutzers zu verbinden (Mit Amazon anmelden, Mit Apple, Facebook oder Google anmelden), fügen Sie das Identitätsanbieter-Token der Login-Map hinzu, wenn Sie anrufen GetOpenIdTokenForDeveloperIdentity. Um dies zu ermöglichen, müssen Sie, wenn Sie Ihr Backend von Ihrem Client-SDK aus aufrufen, um Ihren Endbenutzer zu authentifizieren, zusätzlich das Social Provider-Token des Endbenutzers übergeben.

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. Bei anderen 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. Wenn die Map nicht leer ist und einen Schlüssel mit dem Namen des Entwickler-Anbieters enthält, rufen Sie Ihr Back-End an. Rufen Sie andernfalls die IdentityId Methode get 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; } }

In ähnlicher Weise hat die getIdentityId Methode je nach Inhalt der Login-Map zwei Abläufe:

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 Login-Map basierend auf dem aktuellen Identity Provider 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 wird gezwungen, sich neue zu besorgen.

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 Login-Map 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 wird gezwungen, sich neue zu besorgen.

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. Bei anderen 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 Vorgehensweise in Unity besteht darin, Ihren Identitätsanbieter von AmazonCognitoEnhancedIdentityProvide statt von zu erweitern und die übergeordnete RefreshAsync Methode anstelle Ihrer eigenen aufzurufen AbstractCognitoIdentityProvider, falls der Benutzer nicht mit Ihrem eigenen Backend authentifiziert ist. Wenn der Benutzer authentifiziert wurde, können Sie den gleichen Ablauf verwenden, der oben bereits erläutert wurde.