AWS Cognito をアイデンティティプロバイダーとして設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
このガイドは、認証されたAmazon Web Services (AWS) デベロッパーがAmazon CognitoユーザーをAccelByte Gaming Services (AGS) に接続するのに役立ちます。ここに記載されていないAWSサービス内の追加機能を設定する必要がある場合があります。AWSサービスの設定に関する完全な情報については、AWSの担当者に連絡し、AWSドキュメントを確認することをお勧めします。
目標
AccelByte Player Portalを使用してパブリッシャーウェブサイトのAmazon Cognito認証方法を有効にします。
前提条件
- AWSアカウント。
- 最新バージョンのAccelByte Game SDKがインポートされたUnityまたはUnrealゲームプロジェクト。
- 認証を設定し、権限を管理するためのAGS Admin Portalアカウント。
- ゲームnamespace。
- AGS Identity and Access Management (IAM) Clientsに関する知識。
Amazon Cognitoの設定
Amazon Cognitoユーザープールの作成
ユーザープールは、Amazon Cognitoのユーザーディレクトリです。ユーザープールを使用すると、ユーザーはAmazon Cognitoを通じてゲームにサインインできます。ユーザープールの作成ガイドに従って、新しいユーザープールを作成します。
Integrate your appセクションで、次の操作を行う必要があります:
- 初期アプリクライアントタイプを
publicに設定します。 - BaseURLを許可されたコールバックURLとして追加します(BaseURLはドメインアドレス、例:
https://development.accelbyte.io)。 - 認証フローで
ALLOW_USER_PASSWORD_AUTHを設定します。
Amazon Cognitoユーザーの設定
ユーザープールを作成した後、ユーザープール内のユーザーを管理する必要があります。詳細については、ユーザープール内のユーザーの管理ガイドを参照してください。
Amazon Cognitoログイン方法の設定
次の手順に従って、ゲームでAmazon Cognitoログインを設定します。これにより、プレイヤーはAmazon Cognitoアカウントを使用してゲームにサインインできるようになります。
-
AGS Admin portalで、パブリッシャーnamespaceに移動します。
-
サイドバーメニューで、Game Setup > 3rd Party Configuration > Auth & Account Linkingに移動します。
-
Auth & Account Linkingページで、+ Add Newボタンをクリックします。

-
ログイン方法オプションのリストから、AWS Cognitoを選択します。

-
AWS Cognito User PoolフィールドにUser Pool IDを、AWS Cognito RegionフィールドにAmazon Cognitoリージョンを入力します。

-
詳細ページにリダイレクトされます。この時点でアクティベートするだけで使用できるようになります。

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)
Unreal EngineプロジェクトにAWS SDK for C++を含める方法は次のとおりです:
- 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はAccess 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ファイルをコピーし、Assets/ResourcesディレクトリのUnityプロジェクトディレクトリに追加します。
- ゲームに基づいた情報を使用して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という名前のファイルを作成し、Assets/ResourcesディレクトリのUnityプロジェクトディレクトリに追加します。
- ゲームサーバー設定として使用される以下のコードで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つのファイルを作成します。これらのファイルの両方をAssets/ResourcesディレクトリのUnityプロジェクトディレクトリに追加します。これらの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;
}
}
以下のコードは、上記のメソッドから取得した認証トークンによってサードパーティプラットフォームログインを処理するAccelByte SDKの一部であるLoginWithOtherPlatformを処理します。
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はAccess Tokenです。
Login Handlerスクリプトをプロジェクトに追加した後、プロジェクトをコンパイルできます。
サンプルコードのテスト (Unity)
これで、プロジェクトをビルドして実行できます。以下は、コードが機能し、Amazon Cognitoとテストアプリを使用してログインできることを示すスクリーンショットです。
