本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在應用程式中收集威脅防護的資料
Amazon Cognito 適應性身分驗證會從使用者登入嘗試的內容詳細資訊中,評估嘗試帳戶接管的風險層級。您的應用程式必須將內容資料新增至 API 請求,以便 Amazon Cognito 威脅防護可以更準確地評估風險。內容資料是 IP 地址、瀏覽器代理程式、裝置資訊和請求標頭等資訊,可提供使用者如何連線到使用者集區的相關內容資訊。
提交此內容至 Amazon Cognito 的應用程式的中心責任是對使用者集區的身分驗證請求中的EncodedData
參數。若要將此資料新增至您的請求,您可以使用可自動產生此資訊的 SDK 來實作 Amazon Cognito,或實作 JavaScript、iOS 或 Android 模組來收集此資料。直接向 Amazon Cognito 提出請求的用戶端限定應用程式必須實作 AWS Amplify SDKs。具有中繼伺服器或 API 元件的用戶端伺服器應用程式必須實作個別的 SDK 模組。
在下列案例中,您的身分驗證前端會管理使用者內容資料收集,而不需要任何額外的組態:
-
受管登入會自動收集內容資料並將其提交至威脅防護。
-
所有 AWS Amplify 程式庫的身分驗證方法都內建內容資料收集。
使用 Amplify 在僅限用戶端應用程式中提交使用者內容資料

Amplify SDKs支援直接使用 Amazon Cognito 進行身分驗證的行動用戶端。這類用戶端會直接向 Amazon Cognito 公有 API 操作提出 API 請求。根據預設,Amplify 用戶端會自動收集威脅防護的內容資料。
使用 JavaScript 擴增應用程式是例外狀況。它們需要新增 JavaScript 模組來收集使用者內容資料。
一般而言,此組態中的應用程式會使用未經驗證的 API 操作,例如 InitiateAuth 和 RespondToAuthChallenge。UserContextData 物件有助於更準確地評估這些操作的風險。Amplify SDKs會將裝置和工作階段資訊新增至 的 EncodedData
參數UserContextData
。
在用戶端伺服器應用程式中收集內容資料
有些應用程式具有前端層,可收集使用者身分驗證資料,以及向 Amazon Cognito 提交身分驗證請求的應用程式後端層。這是微服務支援的 Web 伺服器和應用程式中常見的架構。在這些應用程式中,您必須匯入公有內容資料收集程式庫。

一般而言,此組態中的應用程式伺服器會使用已驗證的 API 操作,例如 AdminInitiateAuth 和 AdminRespondToAuthChallenge。ContextData 物件可協助 Amazon Cognito 更準確地評估這些操作的風險。的內容ContextData
是您的前端傳遞至伺服器的編碼資料,以及使用者 HTTP 請求到伺服器的其他詳細資訊。這些額外的內容詳細資訊,例如 HTTP 標頭和 IP 地址,可提供應用程式伺服器使用者環境的特性。
您的應用程式伺服器也可能使用未經驗證的 API 操作登入,例如 InitiateAuth 和 RespondToAuthChallenge。UserContextData 物件會通知這些操作中的威脅防護風險分析。可用公有內容資料收集程式庫中的操作會將安全資訊新增至身分驗證請求中的 EncodedData
參數。此外,將使用者集區設定為接受其他內容資料,並將使用者的來源 IP 新增至 的 IpAddress
參數UserContextData
。
將內容資料新增至用戶端伺服器應用程式
-
在前端應用程式中,使用 iOS、Android 或 JavaScript 模組從用戶端收集編碼的內容資料。
-
將編碼資料和身分驗證請求的詳細資訊傳遞給您的應用程式伺服器。
-
在您的應用程式伺服器中,從 HTTP 請求擷取使用者的 IP 地址、相關的 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 組態。<region>
將 取代 AWS 區域 為下列清單中的 :us-east-1
、us-east-2
、eu-west-2
、、 us-west-2
eu-west-1
或 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 應用程式可以整合適用於 iOS 模組 AWSCognitoIdentityProviderASF 的 Mobile SDK
若要收集編碼內容資料以進行威脅防護,請將下列程式碼片段新增至您的應用程式:
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 應用程式可以整合適用於 Android 模組 aws-android-sdk-cognitoidentityprovider-asf 的 Mobile SDK
若要收集編碼內容資料以進行威脅防護,請將下列程式碼片段新增至您的應用程式:
UserContextDataProvider provider = UserContextDataProvider.getInstance(); // context here is android application context. String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);