メモ　パスワードベースのシングルサインオン

# 改修するほどのお金はないけどSSOを実現したい

仕事をしてると上記のような要望がたまにあがる。

調べていたら、特別な実装を必要とせず、「My Apps Secure Sign-in Extension」というブラウザ拡張のインストールと設定のみでSSOを実現する手段として、Microsoft EntraIDのパスワードベースのSSOが使えそうだったのでメモしておく

# パスワードベースのSSOってどんなもの？

Microsoft Entra IDにアプリケーションへのログイン情報を記録させることで、次回以降のログイン時にはMicrosoft Entra IDが代理でパスワードを送信してくれる。

https://qiita.com/NShohei/items/fc732d4080ef8f295e7c

上記で学んだ中では「代理認証方式」に該当するものと思われる。

# 触ってみた

ID/Passwordの入力に応じてログインの成否が表示されるログインページだけの下記のアプリケーションを動かしてパスワードのSSOを実際に使ってみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/86c4723f-9df8-e488-5886-d68db5434a77.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/75f53fbb-c872-b39a-449c-70061268b545.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/46e3ea98-aa16-422a-475f-91125ffd3f3e.png)


```python
from flask import Flask, request, redirect, url_for
import ssl

app = Flask(__name__)

@app.route('/top')
def index():
    return '''
        <form action="/login" method="post">
            ID: <input type="text" name="identity"><br>
            PW: <input type="password" name="password"><br>
            <input type="submit" value="ログイン">
        </form>
    '''

@app.route('/login', methods=['POST'])
def login():
    if request.form['identity'] == 'test' and request.form['password'] == 'pass':
        return redirect(url_for('success'))
    else:
        return 'ログインに失敗しました。'

@app.route('/success')
def success():
    return 'ログインに成功しました。'

if __name__ == '__main__':
    app.run(debug=True, ssl_context=("C:\\Users\\nodas\\source\\repos\\sample-login\\server.crt", "C:\\Users\\nodas\\source\\repos\\sample-login\\private.key"))

```

# Microsoft Entra ID側の設定

Microsoft Entra 管理センター にログインする

https://entra.microsoft.com

エンタープライズアプリケーション＞新しいアプリケーション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/8db21924-8a8e-468a-3ae6-5fbaea2f1e4e.png)

「独自のアプリケーションの作成」をクリックすると右側に登録用のペインが表示されるのでアプリケーション名を入力して作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/a00589db-4877-8434-7463-1a323e8ee180.png)

「シングルサインオン」をクリックし、シングルサインオン方式から「パスワードベース」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/4270c308-e651-d0de-55ed-a45bc8033a73.png)

サインオンURLにアプリケーションのログイン画面のURLを張り付けて保存ボタンを押下する
サインインフィールドを自動検知してくれるはずだが、失敗するとオレンジの枠線のように
手動構成のためのリンクが表示される
![キャプチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/9f8d8837-80c8-98b2-ece1-2ad58d3d23bb.png)

シングルサインオン設定の構成をクリックすると右側に構成用のペインが開かれるので
「サインインフィールドの手動検出」を選択し「サインインフィールドの読み込み」をクリックする
（\$*\$事前に「My Apps Secure Sign-in Extension」というブラウザ拡張をインストールしておくこと）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/e5ce0aff-de48-29c5-704c-3f38ba472970.png)

アプリケーションのログイン画面にリダイレクトされるのでID/PWを入力すると
入力欄が強調されて表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/37eca70c-7dfd-0278-9205-534ed4d194ce.png)

ログインに成功すると確認メッセージが表示されるのでOKをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/6d1cb69a-d1fa-e777-08e9-58b7d628c055.png)

ユーザーとグループからユーザを追加し、「資格情報の更新」から当該ユーザのログイン情報の設定ができるので設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/70e11f1d-5e92-b909-7ca2-08622894815f.png)

アプリケーションのログイン画面を改めて開くとパスワードが保存されてるので拡張情報からログインする旨が表示されるので、拡張機能をクリックするとログインできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/8be416bf-c3fb-e504-2dc9-fa8fed9e8394.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/e82a5bf9-87df-083f-36e0-a2caf56c3d62.png)

またMy Appsのダッシュボードからアプリケーションを選択してログインすることもできる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/fd1cd007-36e2-0126-e345-fdc0bcbf0b26.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754817/e82a5bf9-87df-083f-36e0-a2caf56c3d62.png)

### 参考

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

https://chromewebstore.google.com/detail/my-apps-secure-sign-in-ex/ggjhpefgjjfobnfoldnjipclpcfbgbhl?hl=ja&utm_source=ext_sidebar

https://qiita.com/akihiro_suto/items/2f7825bfc0cb8a506e4d