Steam をアイデンティティプロバイダーとして設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
このガイドは、認証済みの Steam デベロッパーが Steam のプレイヤーアカウントを AccelByte Gaming Services (AGS) に接続するための手順を説明します。ゲームによっては、ここに記載されていない Steam サービスの追加機能を設定する必要がある場合があります。Steam サービスの設定に関する詳細な情報については、Steam の担当者に直接お問い合わせいただくとともに、Steam の公式ドキュメントもあわせて確認してください。
このガイドは一般公開向けであり、機密保持の都合上、限定的な情報のみを掲載しています。まずは機密版の完全なガイドを参照することをお勧めします。機密版ガイドの提供をご希望の場合は、担当の AccelByte テクニカルプロデューサーにお問い合わせください。
目標
- AGS SDK を使用して、ゲームで Steam 認証方式を有効にする。
- AGS Player Portal を使用して、パブリッシャーの Web サイトで Steam 認証方式を有効にする。
前提条件
Web ログイン統合の場合
- 有効な Steam デベロッパーアカウント、および Steamworks にログインできること。
- 認証の設定と権限の管理を行うための AGS Admin Portal アカウント。
- Player Portal と Launcher で使用するパブリッシャーネームスペース。
- Player Portal。
Web ログイン統合は現在、AGS Public Cloud では利用できず、AGS Private Cloud でのみサポートされています。
ゲーム内ログイン統合の場合
- 有効な Steam デベロッパーアカウント、および Steamworks にログインできること。
- Unreal Engine Steam OSS。
- UE V4.27 以下: Unreal Engine OSS
- UE V5.0: Unreal Engine OSS
- Unity 用の Steamworks.NET バージョン 20.2.0 以上。
- Steamworks ページから取得した、Unreal Engine または Unity 用の Steamworks SDK。
- 最新バージョンの AGS SDK をインポートした Unity または Unreal のゲームプロジェクト。
- 認証の設定と権限の管理を行うための AGS Admin Portal アカウント。
- ゲームネームスペース。
- AGS のアイデンティティおよびアクセス管理 (IAM) クライアントに関する知識。
Steam アプリを設定する
Steam アプリを作成する
Steamworks アカウントの配下に Steam アプリケーションを作成します。Steam アプリケーションの詳細については、アプリケーションに関する Steam のドキュメントを参照してください。 Steamworks アカウントの配下に Steam アプリケーションを作成します。Steam アプリケーションの詳細については、アプリケーションに関する Steam のドキュメントを参照してください。
Steam Publisher Web API Key を作成する
Steamworks アカウントを使用して、グループの配下に Publisher Web API Key を作成します。Steam Publisher Web API Key の詳細については、Web API の概要に関する Steam のドキュメントを参照してください。 Steamworks アカウントを使用して、グループの配下に Publisher Web API Key を作成します。Steam Publisher Web API Key の詳細については、Web API の概要に関する Steam のドキュメントを参照してください。
Steam ログイン方式を設定する
Web ログイン
設定手順
-
AGS Admin Portal で、パブリッシャーネームスペースに移動します。
-
サイドバーメニューで、Foundations > 3rd Party Integrations > Auth & Account Linking に移動します。
-
Auth & Account Linking ページで、+ Add New をクリックします。

-
Select login provider ページで
steamを検索し、Steam Web をクリックします。
-
Set Up Steam Web login provider フォームが表示されます。以下のフィールドを入力します。
- Platform ID:
steamopenid。AGS が自動的に設定するため、変更はできません。 - Steam Web API Key: Steamworks Portal から取得した Steam Publisher Web API Key。
- Redirect URI: ドメインの URL(例:
https://development.accelbyte.io)があらかじめ入力されています。あわせて、以下の URI を Steam デベロッパーコンソールに許可済みリダイレクト URI として登録してください({baseUrl}はドメインアドレス、{namespace}はパブリッシャーネームスペースを指します)。{baseUrl}{baseUrl}/iam/v3/platforms/steamopenid/authenticate{baseUrl}/iam/v3/public/namespaces/{namespace}/users/me/platforms/steamopenid/web/link/establish(アカウント連携に使用します)
注記無効な Steam Publisher Web API Key を入力すると、「Steam Web API Key is invalid」というエラーメッセージが表示されます。

- Platform ID:
-
Add & Activate をクリックすると、プロバイダーの作成と有効化を一度に実行できます。有効化せずに作成する場合は、Add をクリックします。
ログインプロバイダーを編集する
-
Auth & Account Linking ページで、Steam Web プロバイダーをクリックします。
-
画面右側にプロバイダーの設定パネルが表示されます。必要に応じて各フィールドを更新します。
-
パネル上部の Status トグルを使用して、プロバイダーを有効化または無効化します。

-
Save をクリックします。
試してみる
-
Player Portal に移動し、Login ボタンをクリックします。

-
Steam アイコンが見つからない場合は、More login options をクリックします。

-
Login with Steam をクリックします。

Steam Web Login ページにリダイレクトされ、そこで Steam の認証情報を入力できます。

現在、プレイヤーは Steam アカウントを既存の AGS アカウントに連携するか、新しいアカウントに連携するかの選択を求められます。AccelByte では、プレイヤーがヘッドレスアカウントで Player Portal に直接ログインできるよう、この動作を設定可能にする取り組みを進めています。
ゲーム内ログイン
設定手順
-
AGS Admin Portal で、ゲームネームスペースに移動します。
-
サイドバーメニューで、Foundations > 3rd Party Integrations > Auth & Account Linking に移動します。
-
Auth & Account Linking ページで、+ Add New をクリックします。

-
Select login provider ページで
steamを検索し、Steam SDK をクリックします。
-
Set Up Steam SDK login provider フォームが表示されます。以下のフィールドを入力します。
- Platform ID:
steam。AGS が自動的に設定するため、変更はできません。 - App ID: Steam ゲームの App ID。
- Steam Web API Key: Steamworks Portal から取得した Steam Publisher Web API Key。
- Redirect URI: デフォルト値は
http://127.0.0.1です。この URL をそのまま、Steam デベロッパーコンソールに許可済みリダイレクト URI として登録してください。
注記無効な Steam Publisher Web API Key を入力すると、「Steam Web API Key is invalid」というエラーメッセージが表示されます。

- Platform ID:
-
Add & Activate をクリックすると、プロバイダーの作成と有効化を一度に実行できます。有効化せずに作成する場合は、Add をクリックします。
ログインプロバイダーを編集する
-
Auth & Account Linking ページで、Steam SDK プロバイダーをクリックします。
-
画面右側にプロバイダーの設定パネルが表示されます。必要に応じて各フィールドを更新します。
-
パネル上部の Status トグルを使用して、プロバイダーを有効化または無効化します。

-
Save をクリックします。
Steam 用の IAM クライアントを作成する
IAM クライアントは、対象プラットフォームでリリースするゲームクライアントを表すものです。IAM クライアントの詳細については、アプリケーションのアクセス制御を管理するを参照してください。
ゲーム内ログインの手順
設定手順はゲームエンジンごとに異なります。以下のタブから、使用しているゲームエンジンを選択してください。
- Unreal Engine Instructions
- Unity Instructions
ゲーム内ログイン統合 (Unreal)
AGS SDK を使用して Steam ログインを統合すると、プレイヤーは Steam の認証情報を使用してゲームにログインできるようになります。
準備と設定 (Unreal)
依存関係の追加 (Unreal)
まず、OnlineSubsystem、OnlineSubsystemSteam、Steamworks の各パブリック依存モジュールを追加します。これらは、Unreal Engine 内で Steam オンラインサブシステムを使用できるようプロジェクトを統合するために必要な依存関係です。
public ABThirdPartyLogin(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" , "AccelByteUe4Sdk", "Slate", "SlateCore" });
PrivateDependencyModuleNames.AddRange(new string[] { "Json", "OnlineSubsystem", "OnlineSubsystemSteam", "Steamworks", "HTTP" });
}
<YourProject>.Target.cs ファイルと <YourProjectEditor>.Target.cs ファイルの中に OnlineSubsystemSteam を追加します。
public ABThirdPartyLoginTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemSteam" } );
}
public ABThirdPartyLoginEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemSteam" } );
}
Steam ログイン用のプロジェクト設定 (Unreal)
DefaultEngine.ini ファイルに、Steam の設定に必要な変数をいくつか追加します。この設定により、プロジェクトを開いたときに Steam が自動的に起動するようになります。
Unreal Engine に Steam オンラインサブシステムを使用させるには、以下の設定を追加します。
[OnlineSubsystem]
DefaultPlatformService=Steam
アプリケーションで Steam オンラインサブシステムを使用することを Unreal Engine に指定したら、次に以下の設定を追加して OnlineSubsystemSteam モジュールを構成します。
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
SteamDevAppId には、Steam ゲームの App ID を指定します。
アプリケーションの接続に使用する Net Driver に、Steam のクラスを指定します。
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
AGS 用のプロジェクト設定 (Unreal)
DefaultEngine.ini に AGS の認証情報を追加します。
[/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"
AppId=480
IamServerUrl="https://prod.gamingservices.accelbyte.io/iam"
PlatformServerUrl="https://prod.gamingservices.accelbyte.io/platform"
AppId には、Steam ゲームの App ID を指定します。
推奨される DefaultEngine.ini の設定 (Unreal)
以上の手順を実施すると、DefaultEngine.ini ファイルは次の例のようになります。
[OnlineSubsystem]
DefaultPlatformService=Steam
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=<your steam game app id>
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
[/Script/AccelByteUe4Sdk.AccelByteSettings]
ClientId=<Your IAM_Client_Id>
ClientSecret=<Your IAM_Client_Secret>
Namespace=<Your Namespace>
PublisherNamespace=<Your Publisher Namespace>
RedirectURI="http://127.0.0.1"
BaseUrl="https://prod.gamingservices.accelbyte.io"
AppId=<your steam game app id>
IamServerUrl="https://prod.gamingservices.accelbyte.io/iam"
PlatformServerUrl="https://prod.gamingservices.accelbyte.io/platform"
サンプルコードの実装 (Unreal)
ここでは、サンプルコードを使用してゲームに Steam 認証方式を実装する方法を紹介します。
IOnlineSubsystem は、DefaultEngine.ini で定義された DefaultPlatformService の値を読み取ります。IdentityInterface は、ユーザーアカウントに関連するこれらのサービスとのやり取りを管理し、ユーザー認証とアクセストークンの取得を可能にします。認証に成功すると、AGS SDK の LoginWithOtherPlatform 関数が、Identity Interface から取得した認証トークンを使用してサードパーティプラットフォームへのログインを処理します。
AccelByte OnlineSubsystem (OSS) の AccelByteOnlineSubsystemPtr の取得方法については、こちらのガイドを参照してください。
UE_LOG(LogTemp, Warning, TEXT("%s"), TEXT("Begin Login"));
const IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get();
if (OnlineSubsystem == nullptr)
{
FString Message = TEXT("Cannot login with no online subsystem set!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);//will get active OSS Platform Service
return;
}
const IOnlineIdentityPtr OnlineIdentity = OnlineSubsystem->GetIdentityInterface();
if (!OnlineIdentity.IsValid())
{
FString Message = TEXT("Could not retrieve identity interface from native subsystem.");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
return;
}
APlayerController* MyPlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);;
const ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(MyPlayerController->Player);
if (LocalPlayer == nullptr)
{
FString Message = TEXT("Can only login with native platform for local players");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
return;
}
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient(TEXT("YOUR_KEY"));
auto UserApi = ApiClient->GetUserApi().Pin();
const FVoidHandler OnLoginSuccessDelegate = FVoidHandler::CreateLambda([&]() {
FAccountUserData AccountUserData = ApiClient->CredentialsRef->GetAccountUserData();
FString AccountUserDataString;
FJsonObjectConverter::UStructToJsonObjectString(AccountUserData, AccountUserDataString);
FString Message = FString::Printf(TEXT("Login to AB Service Success : %s"), *AccountUserDataString);//Success Login to AB Service
});
const FErrorHandler OnLoginErrorDelegate = FErrorHandler::CreateLambda([=](int32 ErrorCode, const FString& ErrorMessage) {
FString Message = FString::Printf(TEXT("Error Login to AB Service : %s"), *ErrorMessage);
});
const FOnLoginCompleteDelegate NativeLoginComplete = FOnLoginCompleteDelegate::CreateLambda([=]
(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error) {
UE_LOG(LogTemp, Warning, TEXT("OnLoginComplete %s : %s"), bWasSuccessful ? TEXT("Success") : TEXT("Fail"), *Error);
FString Message = FString::Printf(TEXT("OnLoginComplete %s : %s"), bWasSuccessful ? TEXT("Success") : TEXT("Fail"), *Error);
OnActionInfoUpdated.Broadcast(Message);
if (bWasSuccessful)
{
const FString PlatformToken = OnlineIdentity->GetAuthToken(LocalPlayer->GetControllerId());
UE_LOG(LogTemp, Warning, TEXT("PlatformToken : %s"), *PlatformToken);
OnActionInfoUpdated.Broadcast(FString::Printf(TEXT("PlatformToken : %s"), *PlatformToken));//Will Obtained Auth Ticket from OnlineIdentity
UserApi->LoginWithOtherPlatform(EAccelBytePlatformType::Steam, PlatformToken, OnLoginSuccessDelegate, OnLoginErrorDelegate);
UE_LOG(LogTemp, Warning, TEXT("Request LoginWithOtherPlatform"));
OnActionInfoUpdated.Broadcast(TEXT("Request LoginWithOtherPlatform"));
}//this method will hitting the AccelByte endpoint and will return value after success
});
OnlineIdentity->AddOnLoginCompleteDelegate_Handle(LocalPlayer->GetControllerId(), NativeLoginComplete);
const bool bWaitForDelegate = OnlineIdentity->Login(LocalPlayer->GetControllerId(), Credentials);
if (!bWaitForDelegate)
{
FString Message = TEXT("The online subsystem couldn't login");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
}
FString Message = TEXT("Sending login request to native subsystem!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
Steam 認証における platform_token は Auth Ticket です。
このサンプルコードをプロジェクトに追加したら、コンパイル、ビルド、実行を行います。以上で設定は完了です。
サンプルコードのテスト (Unreal)
次の画像は、サンプルコードを使用した Steam ログインの成功例を示しています。

ゲーム内ログイン統合 (Unity)
AGS SDK を使用して Steam のサインインを統合すると、プレイヤーは Steam の認証情報を使用してゲームにログインできるようになります。
準備と設定 (Unity)
プロジェクト設定 (Unity)
SDK Config を開く方法の詳細については、SDK のインストールと設定を参照してください。SDK Config を開いたら、AGS Admin Portal の値に基づいて各属性を入力し、設定を保存します。
サンプルコードの実装 (Unity)
このサンプルコードでは、Steam SDK のラッパーとして Steamworks.NET を使用します。
この例では、Steamworks.NET のバージョン 20.2.0 以上が必要です。
Steam トークンを生成する
Steam のチケットは、新しい API である GetAuthTicketForWebApi を使用して生成できます。
using AccelByte.Core;
using AccelByte.Models;
using Steamworks;
/// <summary>
/// API to generate Steam token
/// </summary>
/// <param name="serviceId">Value of any unique identifier</param>
public static void GenerateSteamTicket(string serviceId, System.Action<string> onGetSteamTokenFinished)
{
if (!SteamManager.Initialized)
{
Debug.LogError("Failed to initialize Steam");
return;
}
Callback<GetTicketForWebApiResponse_t> getAuthSessionTicketResponse = null;
GetTicketForWebApiResponse_t? responseResult = null;
getAuthSessionTicketResponse = Callback<GetTicketForWebApiResponse_t>.Create(response =>
{
getAuthSessionTicketResponse.Dispose();
responseResult = response;
if (response.m_eResult == EResult.k_EResultOK)
{
byte[] bytes = response.m_rgubTicket;
int byteSize = response.m_cubTicket;
string steamTicket = System.BitConverter.ToString(bytes, startIndex: 0, byteSize);
steamTicket = steamTicket.Replace("-", string.Empty);
Debug.Log($"Get steam ticket:\n{steamTicket}");
onGetSteamTokenFinished?.Invoke(steamTicket);
}
else
{
Debug.LogError("Failed to get Steam token");
onGetSteamTokenFinished?.Invoke(null);
}
});
SteamUser.GetAuthTicketForWebApi(serviceId);
}
Epic Games 認証における platform_token は、Access Token または Auth Code です。
次に、AccelByte IAM Service にログインします。
private void LoginAccelByteSteamPlatform(string serviceId)
{
GenerateSteamTicket(serviceId, steamTicket =>
{
if (string.IsNullOrEmpty(steamTicket))
{
Debug.LogError("Steam ticket is empty");
return;
}
AccelByte.Api.User user = AccelByteSDK.GetClientRegistry().GetApi().GetUser();
string platformToken = $"{serviceId}:{steamTicket}";
user.LoginWithOtherPlatform(AccelByte.Models.PlatformType.Steam, platformToken, OnLoginWithSteamDone);
});
}
private void OnLoginWithSteamDone(Result<TokenData, OAuthError> loginResult)
{
if (loginResult.IsError)
{
Debug.Log($"Login failed, Error: {loginResult.Error.error}, Description {loginResult.Error.error_description}");
}
else
{
Debug.Log("Login success");
}
}
トラブルシューティング
このセクションでは、サービスの利用時に発生する可能性がある一般的なエラーや問題と、その解決方法を紹介します。
設定の誤り
Unreal Engine の設定(DefaultEngine.ini 内)で Steam App ID が誤っている場合や設定されていない場合、ゲームは Steam のログインサービスにアクセスできません。
DefaultEngine.iniファイルを再確認し、Steam App ID が正しく設定されていることを確認してください。
Steam ログインが機能しない
Steam 側でアクセストークンを取得できない場合、プレイヤーは Steam でのログインに失敗します。
- Steam アプリがバックグラウンドで実行されていることを確認してください。