Setting up PlayFab authentication using Steam and Unity

This tutorial guides you through the steps for logging into PlayFab using Steam through SteamWorks and Unity.


Before beginning, you should have:

Setting up a PlayFab title

To enable support for Steam authorization, PlayFab requires you to enable the Steam add-on.

Go to your Game Manager page:

  1. Select the Add-ons menu item.
  2. In the list of available Add-ons, locate Steam and select the title link:

Game Manager Add-ons tab

  1. Enter your App ID.
  2. Enter the Web API Key.
  3. Then select Install Steam.

Game Manager install Steam Add-on

This concludes setting up a PlayFab title for Steam integration.

Setting up a Unity project

Start by downloading the latest release of Steamworks.NET from the Releases page.

  • Get the Unity Package version of the release, and import it into the project.
  • Once you import the package, close Unity.
  • Navigate to the Project root folder.
  • Locate the steam_appid.txt file.
  • Open the file and replace the App ID value with your own.

Unity project - Update AppId

Re-open Unity and create a new scene.

Inside that scene create a new gameobject called Steam:

  1. Add a SteamManager component to the gameobject. This component is part of Steamworks.Net.
  2. Create and add a SteamScript component to the gameobject.

Unity project - Add Steam object

The following example shows the code for the SteamScript component.

(Thanks to Dylan Hunt for this example.)

// Import all the necessary namespaces
using System;
using System.Text;
using PlayFab;
using PlayFab.ClientModels;
using Steamworks;
using UnityEngine;

public class SteamScript : MonoBehaviour {
    //This method returns
    public string GetSteamAuthTicket() {
        byte[] ticketBlob = new byte[1024];
        uint ticketSize;

        // Retrieve ticket; hTicket should be a field in the class so you can use it to cancel the ticket later
        // When you pass an object, the object can be modified by the callee. This function modifies the byte array you've passed to it.
        HAuthTicket hTicket = SteamUser.GetAuthSessionTicket(ticketBlob, ticketBlob.Length, out ticketSize);

        // Resize the buffer to actual length
        Array.Resize(ref ticketBlob, (int)ticketSize);

        // Convert bytes to string
        StringBuilder sb = new StringBuilder();
        foreach (byte b in ticketBlob) {
            sb.AppendFormat("{0:x2}", b);
        return sb.ToString();

    public void OnGUI() {
        if (GUILayout.Button("Log In")) {
            if (SteamManager.Initialized) {
                // Execute PlayFab API call to log in with steam ticket
                PlayFabClientAPI.LoginWithSteam(new LoginWithSteamRequest {
                    CreateAccount = true,
                    SteamTicket = GetSteamAuthTicket()
                }, OnComplete,OnFailed);

    // Utility callbacks to log the result
    private void OnComplete(LoginResult obj) {

    private void OnFailed(PlayFabError error) {
        Debug.Log("Failed: " + error.GenerateErrorReport());


You may test right inside the editor:

  1. Run the scene and select the Log In button.
  2. The console message should appear after a moment, indicating the authentication result Success!.

Unity test PlayFab login with Steam