Steam
Authenticate players using their Steam account
Steam authentication lets players log in using their existing Steam account. Uses the Connect Interface - no Epic account required.
Want more from Steam? Steam Integration Kit offers comprehensive Steam platform integration with the latest Steamworks SDK, native Blueprint support for achievements, leaderboards, workshop, inventory, and more. Fully compatible with EOS Integration Kit.
For true crossplay, check out Ultimate Crossplay Integration Kit. It bundles both EIK and SIK with unified nodes that manage sessions across EOS and Steam simultaneously, and much more.
Prerequisites
- OnlineSubsystemSteam plugin enabled
- Steam client running on user's machine
- Steam App ID configured in your project
Steam login uses the Connect Interface, which provides access to EOS game services (lobbies, matchmaking, voice chat) without requiring an Epic Games account.
Setup
1. Enable Steam Subsystem
Add to your DefaultEngine.ini:
[OnlineSubsystem]
DefaultPlatformService=Steam
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=4802. Configure EOS for Steam
In Project Settings → Plugins → EOS Integration Kit, ensure your artifact is configured with Steam as an identity provider in the EOS Developer Portal.
Implementation
Use Login Using Connect Interface with Steam Session Ticket type:
- Add the Login Using Connect Interface node
- Set Login Method to
Steam Session Ticket - Leave Token empty (auto-retrieved from Steam)
Leave the Token field empty - EIK automatically retrieves the Steam session ticket from OnlineSubsystemSteam.
The EIKCore abstraction handles Steam ticket retrieval automatically:
#include "Interfaces/IEIKAuth.h"
void UMyClass::LoginWithSteam()
{
IEIKAuth* Auth = GetIEIKAuth();
if (!Auth) return;
// EIKCore can auto-retrieve Steam ticket, or you can provide one
FEIKLoginCredentials Credentials = FEIKLoginCredentials::SteamLogin();
Auth->LoginConnect(0, Credentials,
[this](const TEIKAsyncResult<FEIKLoginResult>& Result)
{
if (Result.IsSuccessful())
{
UE_LOG(LogTemp, Log, TEXT("Steam login successful! AccountId: %s"),
*Result.GetValue().AccountId.ToString());
}
else
{
UE_LOG(LogTemp, Error, TEXT("Steam login failed: %s"),
*Result.GetError().ErrorMessage);
}
});
}PrivateDependencyModuleNames.Add("EIKCore");Modern approach for UE 5.2+ using the Online Services API:
#include "Online/OnlineServices.h"
#include "Online/Auth.h"
using namespace UE::Online;
void UMyClass::LoginWithSteam()
{
IOnlineServicesPtr Services = GetServices(EOnlineServices::Epic);
if (!Services.IsValid()) return;
IAuthPtr Auth = Services->GetAuthInterface();
if (!Auth.IsValid()) return;
FAuthLogin::Params Params;
Params.PlatformUserId = FPlatformMisc::GetPlatformUserForUserIndex(0);
Params.CredentialsType = FName(TEXT("EIK_Connect_Steam"));
Auth->Login(MoveTemp(Params)).OnComplete(
[this](const TOnlineResult<FAuthLogin>& Result)
{
if (Result.IsOk())
{
UE_LOG(LogTemp, Log, TEXT("Steam login successful!"));
}
else
{
UE_LOG(LogTemp, Error, TEXT("Steam login failed: %s"),
*Result.GetErrorValue().GetLogString());
}
});
}PrivateDependencyModuleNames.AddRange(new string[] { "OnlineServicesInterface", "OnlineServicesEIK" });Legacy approach using the Online Subsystem interface:
#include "OnlineSubsystem.h"
#include "Interfaces/OnlineIdentityInterface.h"
void UMyClass::LoginWithSteam()
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get(FName(TEXT("EIK")));
if (!OnlineSub) return;
IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface();
if (!Identity.IsValid()) return;
// Steam Connect-only login (auto-retrieves ticket)
FOnlineAccountCredentials Credentials;
Credentials.Type = TEXT("noeas_+_steam");
Identity->AddOnLoginCompleteDelegate_Handle(0,
FOnLoginCompleteDelegate::CreateLambda(
[](int32 LocalUserNum, bool bSuccess, const FUniqueNetId& UserId, const FString& Error)
{
if (bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Steam login successful!"));
}
else
{
UE_LOG(LogTemp, Error, TEXT("Steam login failed: %s"), *Error);
}
}));
Identity->Login(0, Credentials);
}PrivateDependencyModuleNames.AddRange(new string[] { "OnlineSubsystem", "OnlineSubsystemEIK", "OnlineSubsystemSteam" });Manual Token Retrieval
If you need to manually retrieve the Steam session ticket (for custom flows):
#include "OnlineSubsystem.h"
#include "Interfaces/OnlineIdentityInterface.h"
void UMyClass::GetSteamTicket()
{
IOnlineSubsystem* SteamSub = IOnlineSubsystem::Get(FName(TEXT("Steam")));
if (!SteamSub) return;
IOnlineIdentityPtr SteamIdentity = SteamSub->GetIdentityInterface();
if (!SteamIdentity.IsValid()) return;
SteamIdentity->GetLinkedAccountAuthToken(0, TEXT("Session"),
IOnlineIdentity::FOnGetLinkedAccountAuthTokenCompleteDelegate::CreateLambda(
[](int32 LocalUserNum, bool bSuccess, const FExternalAuthToken& AuthToken)
{
if (bSuccess)
{
FString TicketString = AuthToken.TokenString;
// Use TicketString with EOS login
}
}));
}Troubleshooting
| Issue | Solution |
|---|---|
| Steam not detected | Ensure Steam client is running and OnlineSubsystemSteam is enabled |
| Invalid credentials | Verify Steam App ID matches your EOS Developer Portal configuration |
| Login timeout | Check internet connection and EOS service status |