Collecte avancée de données de sécurité dans les applications - Amazon Cognito

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Collecte avancée de données de sécurité dans les applications

L'authentification adaptative Amazon Cognito évalue les niveaux de risque liés aux tentatives de prise de contrôle de compte à partir des détails contextuels des tentatives de connexion des utilisateurs. Votre application doit ajouter des données contextuelles aux demandes d'API afin que la sécurité avancée d'Amazon Cognito puisse évaluer les risques avec plus de précision. Les données contextuelles sont des informations telles que l'adresse IP, l'agent de navigateur, les informations sur l'appareil et les en-têtes de demande qui fournissent des informations contextuelles sur la manière dont un utilisateur s'est connecté à votre groupe d'utilisateurs.

La principale responsabilité d'une application qui soumet ce contexte à Amazon Cognito est un EncodedData paramètre dans les demandes d'authentification adressées aux groupes d'utilisateurs. Pour ajouter ces données à vos demandes, vous pouvez implémenter Amazon Cognito avec un SDK qui génère automatiquement ces informations pour vous, ou vous pouvez implémenter un module pour JavaScript iOS ou Android qui collecte ces données. Les applications réservées aux clients qui envoient des demandes directes à Amazon Cognito doivent implémenter des SDK. AWS Amplify Les applications client-serveur dotées d'un serveur intermédiaire ou d'un composant API doivent implémenter un module SDK distinct.

Dans les scénarios suivants, votre interface d'authentification gère la collecte de données contextuelles utilisateur sans configuration supplémentaire :

  • L'interface utilisateur hébergée collecte et soumet automatiquement les données contextuelles aux fonctionnalités de sécurité avancées.

  • Toutes les AWS Amplify bibliothèques ont intégré la collecte de données contextuelles à leurs méthodes d'authentification.

Soumission de données contextuelles utilisateur dans des applications clientes uniquement avec Amplify

Vue d'ensemble de la collecte de données pour les fonctionnalités de sécurité avancées dans une application Amplify.

Les SDK Amplify prennent en charge les clients mobiles qui s'authentifient directement auprès d'Amazon Cognito. Les clients de ce type envoient des demandes d'API directes aux opérations d'API publiques d'Amazon Cognito. Les clients Amplify collectent automatiquement des données contextuelles pour les fonctionnalités de sécurité avancées par défaut.

Les applications Amplify with JavaScript sont une exception. Ils nécessitent l'ajout d'un JavaScript module qui collecte les données contextuelles de l'utilisateur.

Généralement, une application dans cette configuration utilise des opérations d'API non authentifiées telles que InitiateAuthet. RespondToAuthChallenge L'UserContextDataobjet permet d'évaluer plus précisément les risques liés à ces opérations. Les SDK Amplify ajoutent des informations sur le périphérique et la session à un EncodedData paramètre de. UserContextData

Collecte de données contextuelles dans les applications client-serveur

Certaines applications disposent d'un niveau frontal qui collecte les données d'authentification des utilisateurs et d'un niveau principal d'application qui envoie des demandes d'authentification à Amazon Cognito. Il s'agit d'une architecture courante dans les serveurs Web et les applications reposant sur des microservices. Dans ces applications, vous devez importer une bibliothèque publique de collecte de données contextuelles.

Vue d'ensemble de l'authentification côté serveur avec fonctionnalités de sécurité avancées et données contextuelles dans. JavaScript

Dans cette configuration, un serveur d'applications utilise généralement des opérations d'API authentifiées telles que AdminInitiateAuthet AdminRespondToAuthChallenge. L'ContextDataobjet aide Amazon Cognito à évaluer les risques liés à ces opérations avec plus de précision. Le contenu est constitué des ContextData données codées que votre interface a transmises à votre serveur, ainsi que des informations supplémentaires provenant de la requête HTTP de l'utilisateur envoyée à votre serveur. Ces informations contextuelles supplémentaires, telles que les en-têtes HTTP et l'adresse IP, fournissent à votre serveur d'applications les caractéristiques de l'environnement de l'utilisateur.

Votre serveur d'applications peut également se connecter à l'aide d'opérations d'API non authentifiées telles que et. InitiateAuthRespondToAuthChallenge L'UserContextDataobjet fournit des informations sur l'analyse avancée des risques de sécurité lors de ces opérations. Les opérations effectuées dans les bibliothèques de collecte de données contextuelles publiques disponibles ajoutent des informations de sécurité au EncodedData paramètre des demandes d'authentification. Configurez également votre groupe d'utilisateurs pour accepter des données contextuelles supplémentaires et ajoutez l'adresse IP source de l'utilisateur au IpAddress paramètre deUserContextData.

Pour ajouter des données contextuelles aux applications client-serveur
  1. Dans votre application frontale, collectez des données contextuelles codées auprès du client à l'aide d'un système iOS, Android ou d'un JavaScript module.

  2. Transmettez les données codées et les détails de la demande d'authentification à votre serveur d'applications.

  3. Dans votre serveur d'applications, extrayez l'adresse IP de l'utilisateur, les en-têtes HTTP pertinents, le nom du serveur demandé et le chemin demandé à partir de la requête HTTP. Entrez ces valeurs dans le ContextDataparamètre de votre demande d'API à Amazon Cognito.

  4. Renseignez le EncodedData paramètre de ContextData votre demande d'API avec les données d'appareil codées collectées par votre module SDK. Ajoutez ces données contextuelles à la demande d'authentification.

Bibliothèques de données contextuelles pour les applications client-serveur

JavaScript

Le amazon-cognito-advanced-security-data.min.js module collecte les informations EncodedData que vous pouvez transmettre à votre serveur d'applications.

Ajoutez le amazon-cognito-advanced-security-data.min.js module à votre JavaScript configuration. Remplacez <region> par un Région AWS dans la liste suivante : us-east-1us-east-2,us-west-2,eu-west-1,eu-west-2, oueu-central-1.

<script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"></script>

Pour générer un encodedContextData objet que vous pouvez utiliser dans le EncodedData paramètre, ajoutez ce qui suit à la source de votre JavaScript application :

var encodedContextData = AmazonCognitoAdvancedSecurityData.getData(_username, _userpoolId, _userPoolClientId);

iOS/Swift

Pour générer des données contextuelles, les applications iOS peuvent intégrer le module Mobile SDK for iOS AWSCognitoIdentityProviderASF.

Pour collecter des données contextuelles codées à des fins de sécurité avancée, ajoutez l'extrait suivant à votre application :

import AWSCognitoIdentityProviderASF let deviceId = getDeviceId() let encodedContextData = AWSCognitoIdentityProviderASF.userContextData( userPoolId, username: username, deviceId: deviceId, userPoolClientId: userPoolClientId) /** * Reuse DeviceId from keychain or generate one for the first time. */ func getDeviceId() -> String { let deviceIdKey = getKeyChainKey(namespace: userPoolId, key: "AWSCognitoAuthAsfDeviceId") if let existingDeviceId = self.keychain.string(forKey: deviceIdKey) { return existingDeviceId } let newDeviceId = UUID().uuidString self.keychain.setString(newDeviceId, forKey: deviceIdKey) return newDeviceId } /** * Get a namespaced keychain key given a namespace and key */ func getKeyChainKey(namespace: String, key: String) -> String { return "\(namespace).\(key)" }

Android

Pour générer des données contextuelles, les applications Android peuvent intégrer le aws-android-sdk-cognitoidentityprovidermodule -asf du Mobile SDK for Android.

Pour collecter des données contextuelles codées à des fins de sécurité avancée, ajoutez l'extrait suivant à votre application :

UserContextDataProvider provider = UserContextDataProvider.getInstance(); // context here is android application context. String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);