GrowiにMicrosoft EntraIDでSAMLログインする

# Info
- Growi
    - 7.0.21
- Microsoft EntraID ライセンス
    - Microsoft Entra ID Free
- 操作PC
    - Microsoft Windows 10 Pro 22H2 19045.5011
- ブラウザ
    - Google Chrome 129.0.6668.101

# 手順
1. Microsoft EntraID管理画面に行く
    --> https://entra.microsoft.com/
2. `アプリケーション`の`エンタープライズ アプリケーション`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/552eee55-070f-d824-1fc3-8b757b98d157.png)

3. `新しいアプリケーション`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/a6fe11f1-7c94-acc7-51f0-4ae5a62e8642.png)

4. `独自のアプリケーションの作成`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/2fadf4d8-3dc8-69d0-b04a-6bd0a0663ab9.png)

5. 以下の通りに記載し、`作成`を選択する
    - お使いのアプリの名前は何ですか？
        - `Growi`と入力 (名前は自由)
    - アプリケーションでどのような操作を行いたいですか？
        - `ギャラリーに見つからないその他のアプリケーションを統合します`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/b7a71e1d-769a-9089-d15e-e0a29ada2442.png)

6. 作成したアプリを選択し、`シングル サインオン`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/b2a4522b-5b7f-c350-3b57-965dd71d24d9.png)

7. `SAML`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/8d3ae3b0-c101-88f9-6543-716716d09de9.png)

8. `基本的なSAML構成`の編集を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/afabb583-90ec-361b-ce3d-70e17f1c6d61.png)

9. 以下の通り設定する
    1. 【EntraID】`識別子の追加`を選択して、`GrowiEntraId`を入力する (識別子は自由)
    2. 【Growi】Growiの設定を開き、`セキュリティ設定`を選択し、認証機関設計のSAMLを選択し、`エントリーポイント`に上記で入力した`GrowiEntraId`を入力する (EntraID側と識別子を合わせる事)
    3. 【Growi】Growiの設定を開き、`セキュリティ設定`を選択し、認証機関設計のSAMLを選択し、`コールバックURL`をコピーする
    4. 【EntraID】`応答 URL`に上記でコピーした値を入力する

    以下のようになっていたら問題ありません。
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/4e45adce-7c92-4cfc-d2ef-a34a53cc5b57.png)

10. `保存`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/f826dd10-0ce8-9725-1ec2-2cbd3619cbce.png)

11. 属性とクレームの`編集`を選択する

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/08af6d72-7e3a-f5db-e798-37065014277b.png)

12. Growiの設定を開き、`セキュリティ設定`を選択し、認証機関設計のSAMLを選択し、`Attribute Mapping`に以下の通り入力する

    - Growiの`ID`はuser.userprincipalnameのクレーム名を使用する
        - `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name`
    - Growiの`ユーザ名`はuser.surnameのクレーム名を使用する
        - `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name`
    - Growiの`メールアドレス`はuser.mailのクレーム名を使用する
        - `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
    - Growiの`名`はuser.givennameのクレーム名を使用する
        - `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname`
    - Growiの`姓`はuser.surnameのクレーム名を使用する
        - `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname`

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/e66204fa-fa01-6199-e1aa-b3f8db173047.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/154964ab-effd-bb5d-83d0-84b1953c47f2.png)

13. SAML 証明書の`証明書(Base64)`を選択して証明書ファイルをPCにダウンロードする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/6e72a38f-d0cc-242d-5f49-e1f1dc6daddb.png)

14. 上記でダウンロードした証明書ファイルをメモ帳やサクラエディタなどで開き、`Ctrl + A`などで全文コピーする
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/60c9d0e5-d662-14c9-0066-5cf967b27ba9.png)

15. Growiの設定を開き、`セキュリティ設定`を選択し、認証機関設計のSAMLを選択し、`証明書`のテキストボックスに上記でコピーした全文を張り付ける
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/d73886cc-7c7b-4318-87c8-32e3e69ac9c7.png)

16. Growiの`更新`を選択して保存

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/c3abed9a-a85e-89bf-2007-b95612cd7dc7.png)

17. `Test`を選択して、正常にログインができたら成功です

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/ec06fede-6af0-fa04-5456-a7407a3c547c.png)

# メモ
1. `AADSTS50105`エラーが表示された場合

    - `ユーザーとグループ`から`ユーザーまたはグループの追加`でログインできる人を追加してください

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/d2e9f837-1486-5c15-948d-938c13683c44.png)


2. ログインできる人の制限がない場合は`プロパティ`の`割り当てが必要ですか？`をいいえにすると良いです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/4e19ba40-31ae-5ca2-afb8-0cd9745a739a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283091/80b20ffa-2e30-6eb6-caaf-92386cc93ca9.png)

# 番外編

docker-composeで動かしている方は環境変数に登録することもできます。

```yaml
environment:
    - APP_SITE_URL=https://○○○○.co.jp                                                                # サイトのURL
    - SAML_ENABLED=true                                                                              # SAMLログインを有効化
    - SAML_ENTRY_POINT=https://login.microsoftonline.com/○○○○-○○○○-○○○○-○○○○/saml2               # エントリーポイント
    - SAML_ISSUER=GrowiEntraId                                                                       # 発行者
    - SAML_CERT=-----BEGIN CERTIFICATE-----
      MIICBzCCAXACCQD4US7+0A/b/zANBgkqhkiG9w0BAQsFADBIMQswCQYDVQQGEwJK
      UDEOMAwGA1UECAwFVG9reW8xFTATBgNVBAoMDFdFU0VFSywgSW5jLjESMBAGA1UE
      ...
      crmVwBzbloUO2l6k1ibwD2WVwpdxMKIF5z58HfKAvxZAzCHE7kMEZr1ge30WRXQA
      pWVdnzS1VCO8fKsJ7YYIr+JmHvseph3kFUOI5RqkCcMZlKUv83aUThsTHw==
      -----END CERTIFICATE-----                                                                       # 証明書
    - SAML_ATTR_MAPPING_ID=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name                 # ID
    - SAML_ATTR_MAPPING_USERNAME=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name           # ユーザ名
    - SAML_ATTR_MAPPING_MAIL=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress       # メールアドレス
    - SAML_ATTR_MAPPING_FIRST_NAME=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname    # 名
    - SAML_ATTR_MAPPING_LAST_NAME=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname       # 姓
```

# 参考記事

https://www.ether-zone.com/sso-growi-with-azure-ad