アプリケーションの脅威保護のためのデータの収集 - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

アプリケーションの脅威保護のためのデータの収集

Amazon Cognito アダプティブ認証は、ユーザーのサインイン試行のコンテキスト詳細からアカウント乗っ取りを試みた場合のリスクレベルを評価します。Amazon Cognito の高度なセキュリティがリスクをより正確に評価できるように、アプリケーションはAPIリクエストにコンテキストデータを追加する必要があります。コンテキストデータは、IP アドレス、ブラウザエージェント、デバイス情報、リクエストヘッダーなどの情報で、ユーザーがユーザープールにどのように接続したかに関するコンテキスト情報を提供します。

このコンテキストを Amazon Cognito に送信するアプリケーションの主な責任は、ユーザープールへの認証リクエストのEncodedDataパラメータです。このデータをリクエストに追加するには、この情報を自動的に生成SDKする を使用して Amazon Cognito を実装するか、このデータを収集する JavaScript、iOS、または Android 用のモジュールを実装できます。Amazon Cognito に直接リクエストを行うクライアント専用アプリケーションは、 を実装する必要があります AWS Amplify SDKs。中間サーバーまたはAPIコンポーネントを持つクライアントサーバーアプリケーションは、別のSDKモジュールを実装する必要があります。

次のシナリオでは、認証フロントエンドが追加の設定なしでユーザーコンテキストのデータ収集を管理します。

  • ホストされた UI は、コンテキストデータを自動的に収集し、高度なセキュリティ機能に送信します。

  • すべての AWS Amplify ライブラリには、認証方法に組み込まれたコンテキストデータ収集があります。

Amplify を使用したクライアント専用アプリケーションでのユーザーコンテキストデータの送信

Amplify アプリケーションの高度なセキュリティ機能のデータ収集の概要。

Amplify は、Amazon Cognito で直接認証するモバイルクライアントSDKsをサポートします。このようなクライアントは、Amazon Cognito のパブリックAPIオペレーションに直接APIリクエストします。Amplify クライアントは、デフォルトで高度なセキュリティ機能のコンテキストデータを自動的に収集します。

を使用した Amplify アプリケーション JavaScript は例外です。ユーザーコンテキストデータを収集するJavaScript モジュールを追加する必要があります。

通常、この設定のアプリケーションは、 InitiateAuthや などの認証されていないAPIオペレーションを使用しますRespondToAuthChallengeUserContextData オブジェクトは、これらのオペレーションのリスクをより正確に評価するのに役立ちます。Amplify は、デバイスとセッション情報を のEncodedDataパラメータSDKsに追加しますUserContextData

クライアントサーバーアプリケーションでのコンテキストデータの収集

一部のアプリケーションには、ユーザー認証データを収集するフロントエンド層とAmazon Cognitoに認証リクエストを送信するアプリケーションバックエンド層があります。これは、マイクロサービスに裏打ちされたウェブサーバーとアプリケーションの一般的なアーキテクチャです。これらのアプリケーションでは、パブリックコンテキストデータ収集ライブラリをインポートする必要があります。

の高度なセキュリティ機能コンテキストデータを使用したサーバー側の認証の概要 JavaScript。

通常、この設定のアプリケーションサーバーは、 AdminInitiateAuthや などの認証されたAPIオペレーションを使用しますAdminRespondToAuthChallengeContextData オブジェクトはAmazon Cognito がこれらのオペレーションのリスクをより正確に評価するのに役立ちます。のコンテンツContextDataは、フロントエンドがサーバーに渡したエンコードされたデータと、ユーザーのHTTPリクエストからサーバーへの追加の詳細です。HTTP ヘッダーや IP アドレスなどのこれらの追加のコンテキスト詳細により、アプリケーションサーバーにユーザーの環境の特性が提供されます。

アプリケーションサーバーは、 InitiateAuthや などの認証されていないAPIオペレーションでサインインする場合もありますRespondToAuthChallengeUserContextData オブジェクトは、これらのオペレーションで高度なセキュリティリスク分析を通知します。使用可能なパブリックコンテキストデータ収集ライブラリ内のオペレーションは、認証リクエストの EncodedDataパラメータにセキュリティ情報を追加します。さらに、追加のコンテキストデータを受け入れるようにユーザープールを設定し、ユーザーのソース IP を の IpAddressパラメータに追加しますUserContextData

クライアントサーバーアプリケーションにコンテキストデータを追加するには
  1. フロントエンドアプリケーションで、iOS、Android、または JavaScript モジュール を使用してクライアントからエンコードされたコンテキストデータを収集します。

  2. エンコードされたデータと認証リクエストの詳細をアプリケーションサーバーに渡します。

  3. アプリケーションサーバーで、リクエストからユーザーの IP アドレス、関連するHTTPヘッダー、リクエストされたサーバー名、リクエストされたパスを抽出しますHTTP。これらの値を Amazon Cognito へのAPIリクエストの ContextDataパラメータに入力します。

  4. SDK モジュールが収集したエンコードされたデバイスデータを使用して、APIリクエストContextData内の EncodedDataパラメータを入力します。このコンテキストデータを認証リクエストに追加します。

クライアントサーバーアプリケーション用のコンテキストデータライブラリ

JavaScript

amazon-cognito-advanced-security-data.min.js モジュールは、アプリケーションサーバーに渡すことができる EncodedData を収集します。

amazon-cognito-advanced-security-data.min.js モジュールを設定に追加します JavaScript 。を、、us-east-1、、us-east-2us-west-2eu-west-1eu-west-2または <region> AWS リージョン のリストから置き換えますeu-central-1

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

EncodedData パラメータで使用できるencodedContextDataオブジェクトを生成するには、 JavaScript アプリケーションソースに以下を追加します。

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

iOS/Swift

コンテキストデータを生成するために、iOS アプリケーションは Mobile SDK for iOS モジュール を統合できますAWSCognitoIdentityProviderASF

高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、次のスニペットをアプリケーションに追加します。

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

コンテキストデータを生成するために、Android アプリケーションは Mobile SDK for Android モジュール aws-android-sdk-cognitoidentityprovider-asf を統合できます。

高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、次のスニペットをアプリケーションに追加します。

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