> ## Documentation Index
> Fetch the complete documentation index at: https://frenglish.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ユーザー認証

> Sequence インフラスタックを用いた web3 ゲーム向け Unreal SDK API のセッション管理に関するドキュメントです。

[プラットフォーム要件](/sdk/unreal/platforms) ページで、認証方法のセットアップや Builder プロジェクトでの正しい設定方法について詳しくご覧いただけます。

## メール OTP でサインイン

任意のメールアドレスでユーザーをサインインさせると、ワンタイムパスワードが受信箱に届きます。
Email Requires Code イベントをリッスンしてください。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/email_otp.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=6c9804c6c00db89087007119a2ba212e" width="1131" height="400" data-path="images/unreal/email_otp.png" />
    </Frame>
  </Tab>
</Tabs>

## ソーシャルサインイン

デスクトップで SSO 認証を開始するには、必要な id\_token を取得するためにブラウザへ遷移する必要があります。
モバイルでは、統合プラグインを使って SDK がこの処理を自動で行います。

デスクトッププラットフォームでは、`Sign in Web View Required` イベントをリッスンし、返された `Sign In URL` を開いてください。
モバイルプラットフォームでは、`Id Token Received` イベントをリッスンしてください。

`Sign In` 関数を呼び出したら、`SequenceSessionsBP` サブシステムで `Session Established` イベントをリッスンし、サインインが成功したか確認します。問題が発生した場合は `Session Creation Failure` をリッスンしてください。

### Google Id トークンを取得

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/google_idtoken.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=4177a835a01ca5433d2a9aabf71a0d02" width="1231" height="400" data-path="images/unreal/google_idtoken.png" />
    </Frame>
  </Tab>
</Tabs>

### Apple Id トークンを取得

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/apple_idtoken.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=5a1f7af68946ff1d3f9de2305ed86c4d" width="1255" height="400" data-path="images/unreal/apple_idtoken.png" />
    </Frame>
  </Tab>
</Tabs>

### Google でサインイン

有効な Google Id トークンでサインインします。[Google Id トークンの取得](/sdk/unreal/authentication#get-google-id-token)ノードから取得してください。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/jco-kCqEz4S4wsae/images/unreal/unreal_signin_google.png?fit=max&auto=format&n=jco-kCqEz4S4wsae&q=85&s=9ce1026f452b5aa3422d7838040c21c0" width="2020" height="988" data-path="images/unreal/unreal_signin_google.png" />
    </Frame>
  </Tab>
</Tabs>

### Apple でサインイン

有効な Apple Id トークンでサインインします。[Apple Id トークンの取得](/sdk/unreal/authentication#get-apple-id-token)ノードから取得してください。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/jco-kCqEz4S4wsae/images/unreal/unreal_signin_apple.png?fit=max&auto=format&n=jco-kCqEz4S4wsae&q=85&s=32744b7ef88876b7dec92cdc46ef33b8" width="2020" height="988" data-path="images/unreal/unreal_signin_apple.png" />
    </Frame>
  </Tab>
</Tabs>

### Epic でサインイン

有効な Epic Games Id トークンでサインインします。[Unreal 用 EOS プラグイン](https://dev.epicgames.com/documentation/en-us/unreal-engine/online-subsystem-eos-plugin-in-unreal-engine) を参照してください。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/jco-kCqEz4S4wsae/images/unreal/unreal_signin_epic.png?fit=max&auto=format&n=jco-kCqEz4S4wsae&q=85&s=617427502f745764ccb8d71a8f82b961" width="2020" height="988" data-path="images/unreal/unreal_signin_epic.png" />
    </Frame>
  </Tab>
</Tabs>

### OIDC Id トークンでセッション開始

Google、Apple、Epic Games から取得した有効な Id トークンを使ってセッションを開始する場合にこの方法を利用します。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/token_session.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=318d6f646747eb81645fe4b7862e2512" width="1390" height="570" data-path="images/unreal/token_session.png" />
    </Frame>
  </Tab>
</Tabs>

## PlayFab

[設定](/sdk/unreal/configuration)時に `SequenceConfig.ini` ファイルに PlayFab タイトル ID を記載し、[Builder で PlayFab を設定](/solutions/builder/embedded-wallet/playfab-configuration)してください。

### 新しい PlayFab ユーザーを登録

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/playfab_registration.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=ad96e62dccc867a97caf8dcce35d3d0d" width="1438" height="520" data-path="images/unreal/playfab_registration.png" />
    </Frame>
  </Tab>
</Tabs>

### 既存の PlayFab ユーザーでログイン

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/playfab_login.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=3a9d702a63d79fe3b3bed83d30b724ea" width="1436" height="522" data-path="images/unreal/playfab_login.png" />
    </Frame>
  </Tab>
</Tabs>

### カスタム PlayFab 連携

独自の PlayFab 連携がある場合はご利用いただけます。PlayFab から SessionTicket を受け取ったら、`USequenceAthenticator` オブジェクトの `PlayfabAuthenticateWithSessionTicket` メソッドで Sequence API の認証に渡してください。

## ゲストとしてサインイン

ユーザーをゲストとしてサインインさせることができます。ただし、アプリをアンインストールしたりサインアウトした場合、ウォレットへのアクセスは失われますのでご注意ください。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/guest_session.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=23b3a3fb2c32954c06b9f5a45a2ce73c" width="1029" height="400" data-path="images/unreal/guest_session.png" />
    </Frame>
  </Tab>
</Tabs>

## フェデレーテッドアカウント

フェデレーテッドアカウントを利用すると、複数のログイン方法を1つのアカウントとウォレットに紐付けることができます。
ユーザーがゲストでサインインしている場合は、今後も Sequence Embedded Wallet にアクセスできるよう、アカウントのフェデレーションを推奨します。
ユーザーが Sequence API で認証されている間に、適切なフェデレートアカウント呼び出しで追加のログイン方法を追加できます。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/email_federation.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=d410bc79b684d492e35b024ba14df007" width="1131" height="500" data-path="images/unreal/email_federation.png" />
    </Frame>
  </Tab>
</Tabs>

## IDトークンの取得

よくあるユースケースとして、アプリクライアントでログイン処理が完了した後、バックエンドでユーザーの本人確認を行う場合があります。
ユーザーから Sequence Id トークンを取得し、任意の JWKS ライブラリでバックエンド検証用に送信してください。
詳細は [バックエンド検証ガイド](/sdk/headless-wallet/verification) をご覧ください。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/get_id_token.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=4c36acb32c49745a882eae6c9f93a228" width="2824" height="1302" data-path="images/unreal/get_id_token.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TFunction<void (FSeqIdTokenResponse_Data)> OnSuccess = [this](const FSeqIdTokenResponse_Data& Data) { };
    const TFunction<void (FSequenceError)> OnFailure = [this](const FSequenceError& Err){ };

    const TOptional<USequenceWallet*> WalletOptional = USequenceWallet::Get();
    if (WalletOptional.IsSet() && WalletOptional.GetValue())
    {
        const USequenceWallet* Wallet = WalletOptional.GetValue();
        Wallet->GetIdToken(Nonce, OnSuccess, OnFailure);
    }
    ```
  </Tab>
</Tabs>

## サインアウト

認証情報キャッシュをクリアし、現在のユーザーをサインアウトします。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/sign_out.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=73f3732c3cf0835f36ba004522f43394" width="1166" height="432" data-path="images/unreal/sign_out.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TOptional<USequenceWallet*> WalletOptional = USequenceWallet::Get();
    if (WalletOptional.IsSet() && WalletOptional.GetValue())
    {
        USequenceWallet * Api = WalletOptional.GetValue();
        Api->SignOut();
    }
    ```
  </Tab>
</Tabs>

## セッション一覧取得

アクティブなセッションを一覧表示します。

<Tabs>
  <Tab title="ブループリント">
    <Frame>
      <img src="https://mintcdn.com/frenglish/DW77RR7YqAk4ljjJ/images/unreal/list_sessions.png?fit=max&auto=format&n=DW77RR7YqAk4ljjJ&q=85&s=b9fa90ea7e10bff33be471b39d62e533" width="1810" height="818" data-path="images/unreal/list_sessions.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<TArray<FSession>> OnSuccess = [=](TArray<FSession> Response)
    {
        //Response is a list of Sessions
    };
    const FFailureCallback OnFailure = [=](const FSequenceError& Error)
    {
        UE_LOG(LogTemp,Display,TEXT("Error Message: %s"),*Error.Message);
    };
    const TOptional<USequenceWallet*> WalletOptional = USequenceWallet::Get();
    if (WalletOptional.IsSet() && WalletOptional.GetValue())
    {
        USequenceWallet * Api = WalletOptional.GetValue();
        Api->ListSessions(OnSuccess,OnFailure);
    }
    ```
  </Tab>
</Tabs>
