翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アプリケーションの脅威保護のためのデータの収集
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 は、Amazon Cognito で直接認証するモバイルクライアントSDKsをサポートします。このようなクライアントは、Amazon Cognito のパブリックAPIオペレーションに直接APIリクエストします。Amplify クライアントは、デフォルトで高度なセキュリティ機能のコンテキストデータを自動的に収集します。
を使用した Amplify アプリケーション JavaScript は例外です。ユーザーコンテキストデータを収集するJavaScript モジュールを追加する必要があります。
通常、この設定のアプリケーションは、 InitiateAuthや などの認証されていないAPIオペレーションを使用しますRespondToAuthChallenge。UserContextData オブジェクトは、これらのオペレーションのリスクをより正確に評価するのに役立ちます。Amplify は、デバイスとセッション情報を のEncodedData
パラメータSDKsに追加しますUserContextData
。
クライアントサーバーアプリケーションでのコンテキストデータの収集
一部のアプリケーションには、ユーザー認証データを収集するフロントエンド層とAmazon Cognitoに認証リクエストを送信するアプリケーションバックエンド層があります。これは、マイクロサービスに裏打ちされたウェブサーバーとアプリケーションの一般的なアーキテクチャです。これらのアプリケーションでは、パブリックコンテキストデータ収集ライブラリをインポートする必要があります。
通常、この設定のアプリケーションサーバーは、 AdminInitiateAuthや などの認証されたAPIオペレーションを使用しますAdminRespondToAuthChallenge。ContextData オブジェクトはAmazon Cognito がこれらのオペレーションのリスクをより正確に評価するのに役立ちます。のコンテンツContextData
は、フロントエンドがサーバーに渡したエンコードされたデータと、ユーザーのHTTPリクエストからサーバーへの追加の詳細です。HTTP ヘッダーや IP アドレスなどのこれらの追加のコンテキスト詳細により、アプリケーションサーバーにユーザーの環境の特性が提供されます。
アプリケーションサーバーは、 InitiateAuthや などの認証されていないAPIオペレーションでサインインする場合もありますRespondToAuthChallenge。UserContextData オブジェクトは、これらのオペレーションで高度なセキュリティリスク分析を通知します。使用可能なパブリックコンテキストデータ収集ライブラリ内のオペレーションは、認証リクエストの EncodedData
パラメータにセキュリティ情報を追加します。さらに、追加のコンテキストデータを受け入れるようにユーザープールを設定し、ユーザーのソース IP を の IpAddress
パラメータに追加しますUserContextData
。
クライアントサーバーアプリケーションにコンテキストデータを追加するには
-
フロントエンドアプリケーションで、iOS、Android、または JavaScript モジュール を使用してクライアントからエンコードされたコンテキストデータを収集します。
-
エンコードされたデータと認証リクエストの詳細をアプリケーションサーバーに渡します。
-
アプリケーションサーバーで、リクエストからユーザーの IP アドレス、関連するHTTPヘッダー、リクエストされたサーバー名、リクエストされたパスを抽出しますHTTP。これらの値を Amazon Cognito へのAPIリクエストの ContextDataパラメータに入力します。
-
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-2
、us-west-2
eu-west-1
、eu-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
高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、次のスニペットをアプリケーションに追加します。
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
高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、次のスニペットをアプリケーションに追加します。
UserContextDataProvider provider = UserContextDataProvider.getInstance(); // context here is android application context. String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);