Skip to main content

Set up user authentication

Last updated on November 6, 2026

Overview​

User authentication has two parts:

Configure the Steam login method​

If you have not set up Steam login yet, follow Set up Steam as an identity provider first. Then enable the second app.

  1. In the AGS Admin Portal, go to your game namespace.

  2. On the sidebar menu, go to Foundations > 3rd Party Integrations > Auth & Account Linking.

  3. Click the Steam SDK provider.

  4. Select Enable Steam multi app IDs. A second app row appears.

  5. For each row, fill in the following fields:

    • App ID: The Steam App ID. It must be numeric and must belong to your Steam publisher account.
    • Name: A label that helps you tell the apps apart, such as Demo. AGS does not use the name to authenticate players.

    The first row is the default app. To change the default, reorder the rows.

  6. Leave Steam Web API Key and Redirect URI as they are. Both apps share them.

  7. Click Save.

If an App ID is not found under your publisher key, the error appears on that row. The other row keeps its value.

To remove an app, delete its row and click Save and remove.

Send the App ID from your game client​

How AGS validates the App ID during user authentication​

When Steam multiple apps is enabled, each Steam build must send the App ID of its own app as the appId parameter in the login and account linking endpoints. The appId parameter is optional, so any existing integrations keep working and are not broken until you turn the setting on.

These endpoints accept appId in the request payload
RequestEndpoint
LoginPOST /iam/v3/oauth/platforms/{platformId}/token and POST /iam/v4/oauth/platforms/{platformId}/token
Token verificationPOST /iam/v3/oauth/platforms/{platformId}/token/verify
Link a platform accountPOST /iam/v3/public/namespaces/{namespace}/users/me/platforms/{platformId}
Force link a platform accountPOST /iam/v3/public/namespaces/{namespace}/users/me/platforms/{platformId}/force

AGS checks the appId before it performs any further logic. The result depends on whether Enable Steam multi app IDs is on or off:

appId in the requestResult
Not sentAccepted. AGS uses the configured App ID.
Matches the configured App IDAccepted.
Different from the configured App IDRejected with error 10253.
info

AGS also adds a pa_id claim to the generated access token and refresh token of every Steam login. It holds the App ID the ticket was validated against. Other AGS services, like Session service, read the pa_id claim to find out which app a player launched.

SDK integration guide​

Upgrade to the latest AGS SDK. It adds the optional App ID to the Steam login and account linking calls.

  • Unreal Engine SDK and Unreal OSS: Version TBD
  • Unity SDK: Version TBD

With the Online Subsystem (OSS)

You do not need to change your code. The AccelByte OSS reads the App ID of the running Steam app from the Steam online subsystem and sends it on Steam login and account linking. A demo and a full game built from one project each report their own App ID.

The OSS sends the App ID by default. To turn it off, set bSendPlatformAppId to False in DefaultEngine.ini:

[OnlineSubsystemAccelByte]
bSendPlatformAppId=False
note

If you set an AppId in the optional parameters of the login credentials, the OSS uses your value instead.

With the AGS Unreal SDK directly

Set AppId in the optional parameters of each call that sends a Steam ticket:

SDK callOptional parameters struct
LoginWithOtherPlatform, LoginWithOtherPlatformV4, LoginWithOtherPlatformId, LoginWithOtherPlatformIdV4FAccelByteLoginWithOtherPlatformOptionalParameters
LinkOtherPlatform, LinkOtherPlatformId, ForcePlatformLinkV3FAccelByteLinkOtherPlatformOptionalParameters

This example below logs in with Steam. It reuses the delegates from Set up Steam as an identity provider. Replace <YourSteamAppId> with the App ID of the build that runs this code:

FAccelByteLoginWithOtherPlatformOptionalParameters OptionalParams{};
OptionalParams.AppId = TEXT("<YourSteamAppId>");

UserApi->LoginWithOtherPlatformV4(
EAccelBytePlatformType::Steam,
SteamTicket,
OnLoginSuccessDelegate,
OnLoginErrorOAuthDelegate,
bCreateHeadlessAccount,
OptionalParams);

Linking an account works the same way:

FAccelByteLinkOtherPlatformOptionalParameters OptionalParams{};
OptionalParams.AppId = TEXT("<YourSteamAppId>");

UserApi->LinkOtherPlatform(
EAccelBytePlatformType::Steam,
SteamTicket,
OnLinkSuccessDelegate,
OnLinkErrorDelegate,
OptionalParams);