MRが楽しい

MRやVRについて学習したことを書き残す

HoloLens2でOpenIDConnectの認可コードフローを試す

本日はHoloLens2の小ネタ枠です。
HoloLens2でOpenIDConnectの認可コードフローを行う方法を記事にします。

Web認証ブローカー

UWPプラットフォームのアプリではOpenIDやOAuthなどの認証プロトコルを扱う場合にWeb認証ブローカーが利用できます。
learn.microsoft.com

Web認証ブローカーのAuthenticateAsyncメソッドはリクエストをオンラインIDプロバイダーに送信し、結果としてアクセストークンを取得することができます。
本メソッドを利用すると例えば以下のようなUIが表示され、ユーザはサインインを行います。

UnityでWeb認証ブローカを利用する場合、以下のようにメインスレッドではなくUIスレッドで実行する必要があります。

// Web認証ブローカはUIスレッドでのみ動作する
UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
{
    // Web認証ブローカを起動して認証画面を開く
    WebAuthenticationResult result =
        await WebAuthenticationBroker.AuthenticateAsync(
            WebAuthenticationOptions.None,
            new Uri("https://login.microsoftonline.com/"),
            new Uri("http://localhost:50000/"));
}, false);    

前提条件

本記事のサンプルでの認証先として以下の記事で作成した環境のアプリケーションIDとディレクトリIDを利用します。
bluebirdofoz.hatenablog.com

サンプルコード

HoloLens2アプリでボタンを押下すると、認可コードフローを実行してIDトークンを取得する以下のサンプルコードを作成しました。
・OpenIDConnectTest.cs

サンプルシーンにスクリプトを配置し、ButtonとTextコンポーネントの参照を設定しました。
ClientIDとTenantIDのフィールドにそれぞれアプリケーションIDとディレクトリIDを入力しておきます。

プロジェクトをUWPプラットフォームでビルドしてアプリをHoloLens2にデプロイします。

HoloLens2上で起動したアプリ内でボタンをタップするとWeb認証ブローカの画面が開き、リクエストを実行できます。

UIスレッド上で表示されるUIはキャプチャできないようなので、以下の画像は重ね合わせのイメージになります。

認証が成功するとテキスト欄に取得したIDトークンが書き込まれます。