[Entra ID] パスワードベースのSSOを検証する

# はじめに

情シスとしては、社員が使うアプリケーションはSSOにしたいですよね。パスワードは極力利用させず、認証はSAMLやOIDCでSSOを構成し、IdPに集約させたいです。とはいえ、やはりレガシーなアプリケーションがありパスワード認証から変えられなかったり、SSOを利用できるプランにアップグレードするにはコスト面で問題があったり。理想と現実には常にギャップがありますよね。

# Entra ID パスワードベースのSSO

Entra IDにはSAMLでのSSOなどの他に、パスワードベースのSSOという機能があります。ブラウザにアドオンを入れることで、パスワードを自動入力してくれるものです。パスワードはEntra ID側で事前入力しておくことができます。この機能をうまく使えれば、疑似的なパスワードレスを実装することができます。

# ドキュメントはこちら

https://learn.microsoft.com/ja-jp/entra/identity/enterprise-apps/configure-password-single-sign-on-non-gallery-applications

# パスワードによるSSO選択する局面

ドキュメントによると、次の場合にパスワードベースの SSO を選択するとよさそうです。

- SAML SSO プロトコルがアプリケーションでサポートされていない
- アプリケーションは、アクセス トークンとヘッダーではなく、ユーザー名とパスワードを使用して認証する

# 前提条件

テナントでパスワードベース SSO を構成するには、次のものが必要です。

- アクティブなサブスクリプションが含まれる Azure アカウント。 まだアカウントがない場合は、無料でアカウントを作成することができます
- 全体管理者、クラウド アプリケーション管理者、アプリケーション管理者、またはサービス プリンシパルの所有者
- パスワードベースの SSO をサポートするアプリケーション

# Edgeのアドオンをインストール

パスワードベースのSSOを構成する場合はブラウザにアドオンをいれる必要があります。以下のURLより**My Apps Secure Sign-in Extension**をインストールしてください。

https://microsoftedge.microsoft.com/addons/detail/my-apps-secure-signin-ex/gaaceiggkkiffbfdpmfapegoiohkiipl

# 実装

今回は本ブログを公開している**Qiita**に対してログインする際にパスワードを入力しなくても済むようにしたいです。

検証用のアカウントを作成します。アカウント作成後、ログインページのURLをメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/b4e54e9e-8df7-7943-b99a-8193e1ea4773.png)

アカウントを作成したら、Entra IDの管理画面で、エンタープライズアプリケーションを選択し、新規から独自のApplicationの作成に進み、Qiitaという名前（任意）でアプリケーションを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ee676e89-05f5-755d-3a3b-6ad77300ff05.png)

エンタープライズアプリケーションを作成したら、左側のメニューからシングルサインオンを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/63bb64c9-5246-e3de-3f1f-5e003b281936.png)

**パスワードベース**を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/fcb67504-c11f-933e-0f3d-9ea214560e82.png)

次の画面で、ログインURLに先ほどメモしておいたQiitaのログインページURLを貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/1a55a641-8d70-cd96-ff85-54668a207b01.png)

## 自動構成

URLを入れて確定すると、ログインURLのページを解析してくれて、IDとパスワードを入力する場所を特定してくれます。IDやパスワード入力部分のHTMLは以下の通り。この辺を解析して判定してくれている模様。

```ID.html
<input type="text" name="identity" id="identity" placeholder="ユーザー名 または メールアドレス" autofocus="autofocus" class="st-Form_text-round" required="required">
```

```PASS.html
<input type="password" name="password" id="password" placeholder="パスワード" class="st-Form_text-round" required="required">
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7b10bd5f-3d70-baee-db6b-75254dea53cf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/384e3aa7-4740-f152-75ef-e945502275a7.png)

## 手動

QiitaのログインページはHTMLがしっかりしているため自動解析もうまく動きましたが、そうでない場合は手動構成もできます。

**「サインインフィールドを手動検出」** にするとさきほど指定したログインURLに自動遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ce66a015-97bd-babe-9856-619b58436c9b.png)

ここでIDやPASSを入力すると、赤枠で囲まれます。入力した部分を入力場所として検知してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/5e9f06b7-7411-33bf-00ed-b00bdf20402f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0b69f588-e7f5-ce1a-d89f-ff8123081b1b.png)

## ユーザーやグループを設定

このエンタープライズアプリケーションを利用するユーザーやグループを設定します。**「資格情報の更新」** を押すと、ユーザーごとにIDとパスワードを入力できます。ユーザーごとにIDやパスワードを入力することもできますし、グループを使えば、全員一律同じIDやパスワードを割り振ることも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ed9d339e-cd4d-5ad9-7334-056e771c3fe5.png)

さてここまでで、設定作業は終わりです。

# 動作検証

通常のURLからアクセスしても、パスワードベースのSSOは機能しません。
マイアプリポータルからアクセスします。マイアプリポータルは、エンタープライズアプリケーションで割り当てられているアプリケーションが表示されているはずです。
リンクはコピーできるので、ブックマークも可能です。Edgeのアドオンから行くこともできます。おすすめはEdgeのサイドバーにピン止めしておくことです。

マイアプリポータルはこちら↓

https://myapplications.microsoft.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/709165c0-d88c-1b3f-5397-21295a48883e.png)

Entra 管理ポータルのエンタープライズアプリケーション→プロパティからも同じリンクを取り出すことができます。ユーザーはマイアプリポータルに慣れていない場合は管理者側からこのURLを教えてあげましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7113e54b-4eef-c42c-eaa7-93d672965d85.png)

## PCでの動作動画

マイアプリポータルからリンクをクリックしたあとの動画です。早くてわかりにくいですが、自動的にパスワードが入力されていることがわかります。

![パスワードベースのSSO.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/aacdcbe7-80e7-2a6b-3380-19bfae521b5e.gif)

## iPhoneでの動作動画

モバイルでも動きます。そう、Edgeならね😁
私の環境では、Edgeでは動作しましたが、Chrome、Safariでは動きませんでした。Edgeはネイティブに対応しているということみたいですね。

![2024-01-05_18-07-28.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/7f229497-ce1b-c3fa-4382-60d0c899e16a.gif)


# 考察🤔

SAMLを利用したSSOにどうしてもできないときの最後の手段…とはいえ、ユーザー数が1000名いて、個別にユーザーIDとパスワードを管理者が設定してあげるのは運用上厳しいかもしれない。APIとLogic Appsを使えば自動化できるのかな。調べないと。ユーザー数が10名前後とか、パスワードひとつで使いまわしているようなシステムに対して最適なのかなと思いました。パスワードマネージャーを導入すると一人月額1000円程度はかかっちゃうとおもうので、コストと運用負荷のバランスですね。