[UE4] BPだけで簡単なログイン･ユーザ認証機能を作りたい [Auth0]

# はじめに
今回UE4で簡単なユーザのログイン機能を実装する必要があり、それについてダイレクトにまとめられた情報がなかったため記事を書いてみました
私個人はWeb系の知識は乏しく、「AWSとWordpressでサイトを手軽に作る」くらいしかやったことがありません
間違っていることやセキュリティ的によろしくないこともあるかもしれませんが、その際は是非ご指摘いただきたいです
また下記に実装までの手順を記載しておりますが、そちらも実践してみる際は自己責任でお願いいたします

今回はBlueprintだけで実装したいというテーマもあり、そのためプラグインを追加で用いています

## 環境
- MacBook Air (M1, 2020)
    - macOS Monterey v12.0.1
- UE4.27
- VaRest V1.1.33

# Auth0
今回認証にはAuth0を用いてみました
なぜAuth0かというと、私の在籍する企業のサービスで使われており社内で名前を聞いたことがあったからです（雑）
調べてみると、簡単に使えそう（なことが書かれていた）であったり、Qiitaなどで日本語情報もいろいろみつかったり、自分でも扱いやすいかなと思い使ってみることになりました

下記記事に概要が定例に書かれておりました
[認証プラットフォーム Auth0 とは？ - Qiita](https://qiita.com/furuth/items/68c3caa3127cbf4f6b77)

## 登録、設定
[初めてのAuth0ハンズオン - Qiita](https://qiita.com/hisashiyamaguchi/items/2d0bcae052077f6ae4a4)
↑こちらの記事を参考に、`Applicationの登録〜認証機能の統合`の章まで最低限進めましょう

項目と手順は、

1. Auth0登録、アカウント初期設定
1. アプリケーションの作成、設定
1. テストアカウント作成(作成したアプリケーション内のユーザとして)  


また最終的に必要になる情報としては下記になります

- クライアントID (アプリケーションのID)
- ドメイン
- ユーザのアカウント情報(IDとパスワード)

![名称未設定 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496949/95da5ebe-4c96-bcc5-13fd-9d4bacc91e38.png)

## HTTP REST通信
上記で設定したところまでで一度テストしておきましょう
Auth0公式のドキュメントにパラメータの解説やサンプルのコマンドがあります
[Call Your API Using the Authorization Code Flow](https://auth0.com/docs/authorization/flows/call-your-api-using-the-authorization-code-flow)

上記サイトの｢Example POST to token URL｣のサンプルをそのまま使っちゃいます
```テスト
curl --request POST \
  --url 'https://アプリケーションのドメイン/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=password \
  --data 'client_id=アプリケーションのID' \
  --data 'username=ユーザネーム' \
  --data 'password=パスワード' \
```

正しいユーザ情報を入れて送ってみたところ、ちゃんと認証されていますね
```結果
"access_token":"トークン",
"id_token":"トークンID",
"scope":"openid profile email address phone",
"expires_in":86400,
"token_type":"Bearer"
```


試しにわざと間違えたユーザ情報を送ってみたらちゃんと弾かれました
```結果(エラー)
"error": "invalid_grant",
"error_description": "Wrong email or password."
```
# UE4
いよいよUE4で実装します
といってもやりたいことは先程の通信でできてしまっておりますので、それをUE4から実行できればよいだけです
UE4上での実装に必要な機能は、下記2点だけです

- ユーザにID･パスワードを入力させる
- 認証

## VaRestのインストール
UE4のBPでは標準でHTTP REST通信を行えません
こちらのヒストリアさんの記事ではC++でHttp通信を実装する方法が書かれています
[[UE4] HTTP通信 その１ ～基本編～｜株式会社ヒストリア](https://historia.co.jp/archives/3296/)

しかし今回はBPだけで実装したいので、プラグインを使いましょう
こちらの｢VaRest｣というプラグインを用います
このプラグインはBPだけでHttp通信を実装できるもので、無料で提供されています
[VaRest：コードプラグイン - UE マーケットプレイス](https://www.unrealengine.com/marketplace/ja/product/varest-plugin?lang=ja)
インストール後は任意のプロジェクトでVaRestプラグインを有効化しましょう(有効化には再起動が必要です)
<img width="600" alt="image.png (503.5 kB)" src="https://img.esa.io/uploads/production/attachments/9489/2021/11/04/78640/40245703-b1d5-44a3-8797-ef09e4baed2f.png">


## 実装
プラグイン公式でドキュメントがあります
[VaRest UE4 Plugin](https://www.notion.so/VaRest-UE4-Plugin-40b98c54fc184033b60a42e0e4753536)

基本的に今回やりたいことはユーザ情報が合っているか間違っているか確認したいだけですので、
Call URLノードを使って指定URLにJsonでデータを渡してあげます
UI上で情報を入力させて送ります
![bp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496949/44154573-a9e8-cebf-0f0a-cbcc89721978.png)


UI部分はUMGで最小限につくりました
(灰色上部にロゴでも入れようと思ってたけど忘れてた)
<img width="600" alt="名称未設定 2.png (184.2 kB)" src="https://img.esa.io/uploads/production/attachments/9489/2021/11/04/78640/87ca0b50-0c0f-476e-9d26-1f2dd82fa898.png">


## テスト
無事実装できました
あとはレスポンスによってそれぞれ処理を作ればよいですね
![auth0_ue4_test_20211104.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496949/0af77496-ba69-1c49-8eb2-0055cec0a6fa.gif)



# おわりに
今回はBPだけで最低限度の実装でユーザの認証を試してみました
Auth0って便利だなぁと思いました