AWS Cognito をアイデンティティプロバイダーとして設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
このガイドは、Amazon Web Services (AWS) の登録済み開発者が Amazon Cognito のユーザーを AccelByte Gaming Services (AGS) に接続するための手引きです。ここに記載されていない AWS サービスの追加機能の設定が必要になる場合があります。AWS サービスの設定について詳しくは、AWS の担当者に直接お問い合わせいただくか、AWS の公式ドキュメントを参照することをお勧めします。
目標
AccelByte Game SDK を使用して、ゲームで Amazon Cognito 認証方式を有効にします。
前提条件
- AWS アカウント。
- 最新バージョンの AccelByte Game SDK をインポートした Unity または Unreal のゲームプロジェクト。
- 認証の設定と権限管理を行うための AGS Admin Portal アカウント。
- ゲームネームスペース。
- AGS Identity and Access Management (IAM) クライアントに関する知識。
Amazon Cognito の設定
Amazon Cognito ユーザープールの作成
ユーザープールは、Amazon Cognito のユーザーディレクトリです。ユーザープールを使用すると、ユーザーは Amazon Cognito を通じてゲームにサインインできます。ユーザープールの作成ガイドに従って、新しいユーザープールを作成してください。
Integrate your app セクションでは、次の設定を行う必要があります。
- 初期アプリクライアントタイプを
publicに設定します。 - 許可されたコールバック URL として
http://127.0.0.1を追加します。 - 認証フローに
ALLOW_USER_PASSWORD_AUTHを設定します。
Amazon Cognito ユーザーの設定
ユーザープールを作成したら、ユーザープール内のユーザーを管理する必要があります。詳細については、ユーザープール内のユーザーの管理ガイドを参照してください。
AGS で AWS Cognito ログインプロバイダーを設定する
以下の手順に従ってゲーム用の Amazon Cognito ログインを設定し、プレイヤーが自分の Amazon Cognito アカウントでゲームにサインインできるようにします。
-
AGS Admin Portal で、ゲームネームスペースに移動します。
-
サイドバーメニューで、Foundations > 3rd Party Integrations > Auth & Account Linking に移動します。
-
Auth & Account Linking ページで、+ Add New をクリックします。

-
ログインプロバイダーの選択肢の中から AWS Cognito を探してクリックします。

-
Set up AWS Cognito login provider フォームが表示されます。以下のフィールドを入力し、Add & Activate をクリックすると、プロバイダーの作成と有効化を一度に実行できます。有効化せずに作成する場合は、代わりに Add をクリックします。

- Platform ID:
awscognitoです。自動的に設定されるため、変更できません。 - AWS Cognito User Pool: Amazon Cognito のユーザープール ID です。
- AWS Cognito Region: ユーザープールがホストされている AWS リージョン(例:
us-west-2)です。
- Platform ID:
ログインプロバイダーを編集する
-
Auth & Account Linking ページで、AWS Cognito の項目をクリックします。
-
プロバイダーの設定内容を示すダイアログが表示されます。必要に応じて各フィールドを更新します。
-
画面上部の Status トグルで、プロバイダーを有効化または無効化します。
-
Save をクリックします。
IAM クライアントを作成する
IAM クライアントは、ターゲットプラットフォームでリリースするゲームクライアントを表すものです。
特定の SDK プラットフォーム(Xbox、Steam、PlayStation など)向けの IAM クライアントをゲーム用にすでに作成している場合は、新しく IAM クライアントを作成する必要はありません。AWS Cognito はゲームを構築するためのプラットフォームではないため、既存の IAM クライアントを使用できます。IAM クライアントの詳細については、Manage access control for applicationsを参照してください。
ゲーム内ログイン手順
各ゲームエンジンの設定は異なります。利用可能なタブからゲームエンジンを選択してください。
- Unreal Engine の手順
- Unity Engine の手順
ゲーム内ログインの統合 (Unreal)
ゲームを AccelByte SDK のサインイン機能と統合すると、プレイヤーは Amazon Cognito の認証情報を使用してゲームにログインできるようになります。実装には AWS SDK を使用します。
準備と設定 (Unreal)
依存関係の追加 (Unreal)
まず、AccelByteUe4Sdk という公開依存関係モジュールを追加します。この依存関係は、Unreal Engine 内で AccelByte SDK プラグインを使用できるようにプロジェクトを構成するために必要です。
public ABThirdPartyLogin(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" , "AccelByteUe4Sdk", "Slate", "SlateCore" , "AWSCore"});
PrivateDependencyModuleNames.AddRange(new string[] { "Json", "HTTP" });
}
<YourProject>.Target.cs と <YourProjectEditor>.Target.cs に AccelByteUe4Sdk を追加します。
public ABThirdPartyLoginTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "AccelByteUe4Sdk" } );
}
public ABThirdPartyLoginEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "AccelByteUe4Sdk" } );
}
Amazon Cognito ログイン用のプロジェクト設定 (Unreal)
DefaultEngine.ini ファイルに AccelByte の認証情報を追加します。
[/Script/AccelByteUe4Sdk.AccelByteSettings]
ClientId=<Your Client_Id>
ClientSecret=<Your Client_Secret>
Namespace=<Your Namespace>
PublisherNamespace=<Your Publisher Namespace>
RedirectURI="http://127.0.0.1"
BaseUrl="https://prod.gamingservices.accelbyte.io"
IamServerUrl="https://prod.gamingservices.accelbyte.io/iam"
PlatformServerUrl="https://prod.gamingservices.accelbyte.io/platform"
サンプルコードの実装 (Unreal)
AWS SDK for C++ を Unreal Engine プロジェクトに組み込む手順は次のとおりです。
- Unreal Engine プロジェクトを開きます。
- プロジェクトの Source ディレクトリに新しいフォルダを作成します。フォルダ名は AWS などとしてください。
- 展開した AWS SDK のソースコードから
aws-cpp-sdk-coreフォルダを、Unreal Engine プロジェクトに新しく作成した AWS フォルダにコピーします。 - Unreal Engine プロジェクトのソースコードから
<YourProjectName>.Build.csファイルを探します。通常は Source ディレクトリにあり、プロジェクトと同じ名前が付いています。 <YourProjectName>.Build.csファイルをテキストエディタで開きます。<YourProjectName>.Build.csファイル内の PublicDependencyModuleNames セクションにAWSCoreを追加します。- 変更を保存してファイルを閉じます。
- Unreal Engine プロジェクトをビルドします。AWS SDK for C++ のコードがプロジェクトとあわせてコンパイルされます。
以上の手順が完了すると、必要な AWS SDK のヘッダーをインクルードして、Unreal Engine プロジェクトで AWS SDK のクラスと関数を使用できるようになり、AccelByte にログインするためのアクセストークンを取得できます。以下は、実際のコードに実装できるサンプルです。
スニペットで使用している AccelByteOnlineSubsystemPtr を取得する方法については、こちらのガイドを参照してください。
// Set up AWS credentials
Aws::Auth::AWSCredentials credentials("YOUR_ACCESS_KEY_ID", "YOUR_SECRET_ACCESS_KEY");
// Create an Amazon Cognito Identity Provider client object
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient cognitoClient(credentials);
// Construct the authentication request
Aws::CognitoIdentityProvider::Model::InitiateAuthRequest initiateAuthRequest;
initiateAuthRequest.SetAuthFlow(Aws::CognitoIdentityProvider::Model::AuthFlowType::USER_PASSWORD_AUTH);
initiateAuthRequest.SetClientId("YOUR_USER_POOL_CLIENT_ID");
initiateAuthRequest.SetAuthParameters({
{"USERNAME", "YOUR_USERNAME"},
{"PASSWORD", "YOUR_PASSWORD"}
});
// Send the authentication request to Amazon Cognito
auto initiateAuthOutcome = cognitoClient.InitiateAuth(initiateAuthRequest);
if (initiateAuthOutcome.IsSuccess())
{
// Retrieve the access token from the authentication response
const auto& challengeResponse = initiateAuthOutcome.GetResult().GetChallengeParameters();
const auto& accessToken = challengeResponse["ACCESS_TOKEN"];
// Use the access token for AWS SDK calls
// Create an S3 client object
Aws::S3::S3Client s3Client(credentials);
// Example API call: List S3 buckets
Aws::S3::Model::ListBucketsRequest listBucketsRequest;
auto listBucketsOutcome = s3Client.ListBuckets(listBucketsRequest);
if (listBucketsOutcome.IsSuccess())
{
// Handle successful response
FString Message = TEXT("Successfully listed S3 buckets!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);
const FString PlatformToken = accessToken;
UE_LOG(LogTemp, Warning, TEXT("PlatformToken : %s"), *PlatformToken);
OnActionInfoUpdated.Broadcast(FString::Printf(TEXT("PlatformToken : %s"), *PlatformToken));
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient(TEXT("YOUR_KEY"));
auto UserApi = ApiClient->GetUserApi().Pin();
UserApi->LoginWithOtherPlatform(EAccelBytePlatformType::AWSCognito, PlatformToken, OnLoginSuccessDelegate, OnLoginErrorDelegate);
UE_LOG(LogTemp, Warning, TEXT("Request LoginWithOtherPlatform"));
OnActionInfoUpdated.Broadcast(TEXT("Request LoginWithOtherPlatform"));
}
else
{
// Handle error
FString Message = FString::Printf(TEXT("Error listing S3 buckets: %s"), *listBucketsOutcome.GetError().GetMessage().c_str());
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);
}
}
else
{
// Handle authentication error
FString Message = FString::Printf(TEXT("Authentication error: %s"), *initiateAuthOutcome.GetError().GetMessage().c_str());
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);
}
Amazon Cognito 認証における platform_token は、アクセストークンを指します。
このサンプルコードをプロジェクトに追加したら、プロジェクトをコンパイルし、ビルドして実行します。設定は以上です。
サンプルコードのテスト (Unreal)
以下のスクリーンショットは、コードが正しく動作し、サンプルコードを使用して Amazon Cognito でログインできることを示しています。

ゲーム内ログインの統合 (Unity)
Amazon Cognito を AccelByte SDK のサインイン機能と統合すると、プレイヤーは Amazon Cognito の認証情報を使用してゲームにログインできるようになります。
準備と設定 (Unity)
- AWS SDK for Unity をダウンロードし、Unity プロジェクトにインポートします。SDK は AWS SDK for .NET の GitHub リポジトリから入手できます。
- Unity プロジェクトで Assets フォルダに移動し、AWSAssemblies という名前の新しいフォルダを作成します。ダウンロードした AWS SDK をそのフォルダに展開します。
AGS 用のプロジェクト設定 (Unity)
AccelByte SDK をプロジェクトで正しく動作させるには、あらかじめ AGS Admin Portal で作成した値を設定ファイルに入力し、以下の手順に従う必要があります。
- ゲームクライアント設定用に
AccelByteSDKConfig.jsonという名前のファイルを作成します。 - AccelByteSDKConfig.json ファイルをコピーし、Unity プロジェクトの Assets/Resources ディレクトリに追加します。
- ゲームに応じた情報を AccelByteSDKConfig.json ファイルに入力します。JSON ファイルの例は次のとおりです。
{
"Default": {
"Namespace": "<Your Game Namespace>",
"UsePlayerPrefs": true,//It will use Player Preferences
"EnableDebugLog": true,//Enable Debug Logging
"DebugLogFilter": "Log",//Type of Debug Log
"BaseUrl": "https://prod.gamingservices.accelbyte.io",
"RedirectUri": "http://127.0.0.1",
"AppId": "<Your AppId>",
"PublisherNamespace": "<Your Publisher Namespace>"
}
}
- AccelByteServerSDKConfig.json という名前のファイルを作成し、Unity プロジェクトの Assets/Resources ディレクトリに追加します。
- ゲームサーバー設定として使用する以下のコードで AccelByteServerSDKConfig.json を更新します。JSON ファイルの例は次のとおりです。
{
"Default": {
"Namespace": "<Your Game Namespace>",
"BaseUrl": "https://prod.gamingservices.accelbyte.io",
"RedirectUri": "http://127.0.0.1"
}
}
- AccelByteSDKOAuthConfig.json と AccelByteServerSDKOAuthConfig.json という名前の 2 つのファイルを作成します。どちらのファイルも Unity プロジェクトの Assets/Resources ディレクトリに追加します。これら 2 つの JSON ファイルの内容は、いずれも次のようになります。
{
"Default": {
"ClientId": "<Your IAM Client ID>",
"ClientSecret": "<Your IAM Client Secret>"
}
}
サンプルコードの実装 (Unity)
次に、以下のサンプルコードを使用して、ゲームに Amazon Cognito 認証方式を実装する方法を説明します。 Amazon Cognito API を呼び出すためのカスタム SDK を作成する必要があります。以下はその例です。
public class AwsCognitoLoginHandler : MonoBehavior
{
[SerializeField] Button AwsLoginButton;
[SerializeField] Text LoginStatus;
[SerializeField] private string userPoolId = "<Your_UserPoolID>";
[SerializeField] private string clientId = "<Your_AWS_Cognito_AppClientId>";
[SerializeField] private string username = "<Your_AWS_Cognito_username>";
[SerializeField] private string password = "<Your_AWS_Cognito_password>";
// AccelByte's Multi Registry references
private ApiClient apiClient;
private User user;
private async void Start()
{
AwsLoginButton.onClick.AddListener(OnLoginClick);
}
private void OnEnable()
{
LoginStatus.text = "Please Login";
AwsLoginButton.onClick.AddListener(() =>
{
LoginStatus.text = "Attempting Login";
OnLoginClick();
});
}
private async void OnLoginClick()
{
AwsLoginButton.interactable = false;
LoginStatus.text = "Logging in...";
// Configure the Cognito client
AmazonCognitoIdentityProviderClient client = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), RegionEndpoint.USWest2);
// Create the authentication request
InitiateAuthRequest authRequest = new InitiateAuthRequest
{
ClientId = clientId,
AuthFlow = AuthFlowType.USER_PASSWORD_AUTH,
AuthParameters = new Dictionary<string, string>
{
{ "USERNAME", username },
{ "PASSWORD", password }
}
};
try
{
// Send the authentication request
InitiateAuthResponse authResponse = await client.InitiateAuthAsync(authRequest);
// Check the authentication result
if (authResponse.AuthenticationResult != null)
{
// User is successfully authenticated
string accessToken = authResponse.AuthenticationResult.AccessToken;
Debug.Log("Login successful. Access Token: " + accessToken);
LoginStatus.text = "Login AWS successful";
PLEASE FILL THIS PART WITH ACCELBYTE API TO LOGIN TO AB SERVICE
OR YOU CAN FILL IT BASED ON EXAMPLE SECTION CODE BELOW THIS PART
}
else if (authResponse.ChallengeName == ChallengeNameType.NEW_PASSWORD_REQUIRED)
{
// User requires a new password
Debug.Log("New password required. Please handle this case.");
LoginStatus.text = "New password required";
}
else
{
// Authentication failed
Debug.Log("Authentication failed.");
LoginStatus.text = "Authentication failed";
}
}
catch (Exception e)
{
Debug.Log("Error: " + e.Message);
LoginStatus.text = "Error: " + e.Message;
}
AwsLoginButton.interactable = true;
}
}
以下のコードでは、LoginWithOtherPlatform を呼び出します。これは、前述のメソッドで取得した認証トークンを使用してサードパーティプラットフォームでのログインを処理する、AccelByte SDK の機能です。
var apiClient = AccelByteSDK.GetClientRegistry().GetApi();
var user = apiClient.GetUser();
Result<TokenData, OAuthError> loginResult = null;
user.LoginWithOtherPlatform(PlatformType.AWSCognito, accessToken, (Result<TokenData, OAuthError> loginResult) =>
{
if (loginResult.IsError)
{
//If we error, grab the Error Error and Description to print in the Log
Debug.Log($"Login failed : {loginResult.Error.error} Description : {loginResult.Error.error_description}");
//Set the Status Text to display the Error if there is any
LoginStatus.text = $"Login failed : {loginResult.Error.error} Description : {loginResult.Error.error_description}";
}
else
{
Debug.Log($"Login successful : {loginResult.Value.ToJsonString()}");
LoginStatus.text = $"Success Login With AWS Cognito : {loginResult.Value.ToJsonString()} ";
}
//Enable interaction with the Button again
AwsLoginButton.interactable = true;
});
Amazon Cognito 認証における platform_token は、アクセストークンを指します。
Login Handler スクリプトをプロジェクトに追加したら、プロジェクトをコンパイルできます。
サンプルコードのテスト (Unity)
これで、プロジェクトをビルドして実行できます。以下のスクリーンショットは、コードが正しく動作し、Amazon Cognito とテストアプリを使用してログインできることを示しています。
