🔐

【Azure】EasyAuthの導入〜「管理者の承認が必要」について

2024/02/25に公開

初めに

仕事で、AzureのAppServiceにEasyAuthを用いてEntraIDによる認証機能をつけました。Azureのドキュメントに沿ってやれば、とても簡単に認証機能をつけることができた!と思っていたのですが、一部のユーザーで「管理者の承認が必要」という表示が出て、アプリにアクセスできないと言われました。なので、今回はEasyAuthの導入から、「管理者の承認が必要」がなぜ起こったかを自分なりの言葉でわかりやすく記載していこうと思います。

EasyAuthの概要と導入方法

まず、EasyAuthについてざっくりと説明していこうと思います。

EasyAuthとは

EasyAuthとは、AzureのAppService組み込みの認証機能のことです。アプリのコードで認証機能を実装しても良いですが、EasyAuthを使えばコードを書かずとも簡単に認証機能を実装することができます(簡単な分、もちろんできることに限りはありますが)。1つのアプリケーションコードを複数の環境でデプロイする場合、この環境では認証機能を入れるけど、この環境では認証入れないといったように、同じコードを使いつつも環境ごとに使い分けることができる点もメリットかと思いました。

何で認証できる?

私は一番基本的なEntra IDを用いた認証しか試してないですが、以下のIDプロバイダーで認証ができるようです。今回はEntra IDでの認証に絞った話なので、他のIDプロバイダーを使用する場合は多少話が変わってくる点にはご注意ください。

  • Microsoft Entra ID
  • Microsoft アカウント
  • Facebook
  • Google
  • Twitter

EasyAuthの導入方法

以下リンクのMSクイックスタートを読んで進めましょうというのが一番簡単です。Azureは画面が頻繁に変わりますし、私が手順を書くよりもこのドキュメント通りに実行する方が安全かつ確実です!笑
https://learn.microsoft.com/ja-jp/azure/app-service/scenario-secure-app-authentication-app-service
何をやっているかをざっくり書くと、Azureポータルの画面から認証をつけたいAppServiceの認証をクリックし、「IDプロバイダーの追加」など手順通り進めればEasyAuthの認証機能がすぐに実装できます。

[アプリの登録]>[サポートされているアカウントの種類] で、[現在のテナント - 単一テナント]

→の部分を設定することで、アプリにはテナント内の全てのユーザーがアクセスできるようになります。

このクイックスタートでは、AppServiceの画面からEasyAuthに関わる設定が簡単にできるようになっていますが、EntraIDアプリケーションを作成し、それをAppServiceに紐付けるという方法もあるようです。
この点など、EasyAuthに関して以下の記事が非常に参考になりました。
https://qiita.com/hoto17296/items/8fed6dc8c007b07a6b09
App Service の認証画面からだとEntraIDアプリの作成に加え、以下の設定をいい感じに自動でやってくれるようなので、とりあえず認証をサクッと入れたい場合はクイックスタートの流れでやってみることをお勧めします。

  • プラットフォームの追加とリダイレクトURIの設定
  • IDトークン送信の許可
  • クライアントシークレットの作成とAppService側への設定
  • 最低限必要なAPIアクセス許可の追加
  • APIの公開スコープの追加とAppService側への設定
  • AppService側の「発行者のURL」の設定

「管理者の承認が必要」について

概要

まず、ここまでで私は認証機能を導入することができたと思ったのですが、冒頭に記載した、他の人で下図のような「管理者の承認が必要」が表示されアプリにアクセスできないという事象が発生しました。

参照:https://jpazureid.github.io/blog/azure-active-directory/azure-ad-consent-framework/blocked-user-consent.png
これが起こった原因は自分は管理者の権限を持っていたが、他の人は持っていなかったというシンプルなことです。では、なぜ管理者の権限が必要で、どうすれば他の人にもアプリへのアクセスを許可することができるのかを見ていきましょう。
なお、管理者の権限を持っていると下図のような画面が表示され、「承諾」することで今後はこの画面を見ることなく、EntraIDでログイン後、アプリにアクセスできるようになります。

参照:https://jpazureid.github.io/blog/azure-active-directory/azure-ad-consent-framework/user-consent.png
→EasyAuthの場合の必要なアクセス許可は、画像とは少し違い、おそらく「Sign you in and read user profile」のみになるのではないかと思います。

なぜ発生するのか

アプリが、ユーザーがログインしているという情報を知るために、EntraIDにアクセスする必要があります。その時、「ユーザーがログインする」かつ「アプリがEntraIDにアクセスできる権限を持つ」ことが必要なようです。権限といってもおそらく色々あると思うのですが、今回に関してはサインインとユーザーのプロフィールを取得する権限です。
「アプリがEntraIDにアクセスできる権限を持つ」ために、管理者権限ユーザーで承認してあげる必要があります。

管理者の承認をつけるために

自分が一番楽だと思った方法は以下の手順です。以下を実行することで、テナント内の全てのユーザーに対して、EntraIDから情報が取得できる権限をアプリに与えることができます。管理者が一回実行してしまえば各ユーザーごとに設定する必要などないので、楽ですね。

  1. Azure ポータル(https://portal.azure.com/) にグローバル管理者としてサインインします。
  2. 左ペインからAzure EntraIDを選択します。
  3. エンタプーライズアプリケーションを選択します。
  4. 当該のアプリケーションを選択します。
  5. [アクセス許可] を選択し、[“tenant名” に管理者の同意を与えます] ボタンをクリックします。

    参照:https://jpazureid.github.io/blog/azure-active-directory/azure-ad-consent-framework/consent-to-enterprise-application.png
    これでテナント内のユーザーは対象のアプリにアクセスする際、「管理者の承認が必要」という表示が出ることは無くなるので、一安心といった感じですね!

(その他)ユーザーやグループでのアクセス制限

現状だと、テナントのユーザーは誰でもログインしてアプリにアクセスできるようになります。なので、もう少しアクセスできるユーザーを絞りたいという場合もあるでしょう。
そういう場合もユーザーやグループ単位でアクセスできるように、Azureポータル上で簡単に設定することができます。
Entra ID の「エンタープライズアプリケーション」画面で以下を設定します。

  1. プロパティ > 割り当てが必要ですか? を はい に設定
  2. ユーザとグループ でアクセスを許可したいユーザまたはグループを指定

    参照:https://jpazureid.github.io/blog/azure-active-directory/azure-ad-consent-framework/user-assigned-app.png

最後に

ざっくりとEasyAuthの導入の仕方と「管理者の承認が必要」が表示される事象について理解できたでしょうか?EntraIDやMicrosoftGraphなど理解が不十分で説明できていない部分も多いので、今後もより理解を深めていけるように頑張ります。

Discussion