Skip to main content
Passkey registration and authentication only work on native devices (iOS/Android), not in the Unity Editor.

Register a passkey

await DynamicSDK.Instance.Passkeys.RegisterPasskey();

List passkeys

List<UserPasskey> passkeys = await DynamicSDK.Instance.Passkeys.GetPasskeys();

foreach (var pk in passkeys)
{
    Debug.Log($"Passkey: {pk.Id}, created: {pk.CreatedAt}");
}

Authenticate with passkey (MFA)

var result = await DynamicSDK.Instance.Passkeys.AuthenticatePasskeyMFA(
    new MfaCreateToken { SingleUse = true });

string token = result?.MfaToken ?? result?.Jwt;

Delete a passkey

await DynamicSDK.Instance.Passkeys.DeletePasskey(new DeletePasskeyRequest
{
    CredentialId = passkey.CredentialId,
    PasskeyId = passkey.Id,
});

Complete example

using DynamicSDK.Core;
using UnityEngine;
using System.Collections.Generic;

public class PasskeyManager : MonoBehaviour
{
    private List<UserPasskey> _passkeys = new List<UserPasskey>();
    
    public async void RegisterNewPasskey()
    {
        try
        {
            await DynamicSDK.Instance.Passkeys.RegisterPasskey();
            Debug.Log("Passkey registered successfully!");
            
            // Refresh passkey list
            await LoadPasskeys();
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Passkey registration failed: {ex.Message}");
        }
    }
    
    public async void LoadPasskeys()
    {
        try
        {
            _passkeys = await DynamicSDK.Instance.Passkeys.GetPasskeys();
            
            Debug.Log($"Found {_passkeys.Count} passkey(s):");
            foreach (var pk in _passkeys)
            {
                Debug.Log($"  ID: {pk.Id}");
                Debug.Log($"  Created: {pk.CreatedAt}");
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Failed to load passkeys: {ex.Message}");
        }
    }
    
    public async void AuthenticateWithPasskey()
    {
        try
        {
            var result = await DynamicSDK.Instance.Passkeys.AuthenticatePasskeyMFA(
                new MfaCreateToken { SingleUse = true });
            
            string token = result?.MfaToken ?? result?.Jwt;
            
            if (!string.IsNullOrEmpty(token))
            {
                Debug.Log("Passkey authentication successful!");
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Passkey authentication failed: {ex.Message}");
        }
    }
    
    public async void DeletePasskey(UserPasskey passkey)
    {
        try
        {
            await DynamicSDK.Instance.Passkeys.DeletePasskey(new DeletePasskeyRequest
            {
                CredentialId = passkey.CredentialId,
                PasskeyId = passkey.Id,
            });
            
            Debug.Log("Passkey deleted successfully!");
            
            // Refresh passkey list
            await LoadPasskeys();
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Failed to delete passkey: {ex.Message}");
        }
    }
}

Next steps

  • MFA - Multi-factor authentication with TOTP
  • Authentication - Other authentication methods