PleasanterのAzure AppService環境のSAML設定を行ってみる

# PleasanterのAzureAppService環境のSAML設定

> Pleasanter（プリザンター）はオープンソースのビジネスアプリケーションプラットフォームです。顧客管理や営業支援、プロジェクト管理など様々な業務をノンプログラミングでWebデータベース化することができます。動作が軽く、汎用性が高いため、日常的なコミュニケーションやマネジメントの支援ツールとして利用できます。

* https://github.com/Implem/Implem.Pleasanter 参照
* インストール等は、こちらのサイトに詳しく書かれています。
    * [インストーラでプリザンターをAzure AppServiceにサーバレス構成でインストールする](https://pleasanter.org/ja/manual/getting-started-installer-pleasanter-azure)
    * [プリザンターでSAML認証を利用する](https://pleasanter.org/ja/manual/saml)

## はじめに
・非常に優れたアプリをオープンソースで提供しているImplem社に感謝。
・もともとPlesanterは、AD(LDAP)にてユーザー認証を行ってましたが、今回SAML認証を使ってみようとした備忘録です。

## 前提
* 以下の前提とした記事です。
    * Pleasanterは、既にAzureAppServiceにインストールしている。
    * Pleasanterのパラメータ設定を変更するAzure上の権限がある。
    * EntraIDの設定権限(クラウド管理者等)がある。（今回は、365で使用しているEntraIDでの利用）

## アプリケーションの登録
### Microsoft Entra 管理センター（IdP）にPleasanterの登録
* Microsoft Entra 管理センター > アプリケーション > エンタープライズアプリケーション > 新しいアプリケーションを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/bdd6be02-74c8-4862-a90f-0425c92b0691.png)

* 検索バーに「Microsoft Entra SAML Toolkit」と入力し、検索された結果から「Microsoft Entra SAML Toolkit」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/74a91564-f094-42e0-8259-8959505ce52b.png)

* 名前を「Microsoft Entra SAML Toolkit」から「Pleasanter SSO」に変更して、作成ボタンを選択
    * 名前は、自由です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/3ca5d003-5839-40a9-b533-5cb7dc12d33b.png)

### ユーザー、グループの割り当て

* 「ユーザーとグループの割り当て」を選択 > SSOを行いたい対象者もしくはグループを選択して割り当て

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/021e8dfb-2fb2-40d2-bac3-32b3a4678a4c.png)

* 「ユーザーまたはグループの追加」を選択し、PleasanterのSSOを行いたいグループまたは、ユーザーを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/3cade7a3-9162-4b4c-a57d-27b75c8f26ce.png)

### SAML設定
#### 1.基本的なSAML構成
* 「シングルサインオンの設定」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/ff201100-d94e-4208-bcf9-d0f4d219a13b.png)

* 「基本的なSAML構成」の「編集」選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/989bd047-ad16-45ff-8859-6d3819446d22.png)

* 識別子(エンティティID)の「識別子の追加」を選択
    * 「PleasanterのURL」+「/Saml2」を入力する
    * 例：`https://{プリザンターのURL}/Saml2`
    * `Authentication.json`の`EntityId`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/940ddde5-85d4-4233-9a6e-59d0df570ef0.png)

* 「https://samltoolkit.azurewebsites.net」 は、ごみ箱アイコンから削除する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/bf36d828-13ff-405a-93a0-0e608b2a9929.png)

* 「応答 URL (Assertion Consumer Service URL)の「応答URLの追加」を選択
    * 「PleasanterのURL」+「/Saml2/Acs」を入力する
    * 例：`https://{プリザンターのURL}/Saml2/Acs`
    * `Authentication.json`の`SPOptions`の`EntityId`に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/ac2fc5a7-0ec0-4555-9ebf-79c8101bde5c.png)

* 「サインオンURL」の入力
    * 「PleasanterのURL」+「/users/login」を入力する
    * 例：`https://{プリザンターのURL}/users/login`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/9e4b6492-463c-4758-8127-c2b4557ed438.png)

#### 2.属性とクレーム

* 「属性とクレーム」の「編集」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/d83eaac2-00c8-44a8-93cf-aa84f9584126.png)

* 「新しいクレームの追加」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/f551da65-1735-423e-8759-ac07d261a138.png)

* 以下の入力を行い、「保存」を選択

|項目|内容|
|---|---|
|名前|Name|
|ソース属性|user.displayname|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/694c72b5-fa1f-48b3-a57d-286264f8fffa.png)

#### 3.SAML証明書

* 「SAML証明書」の「編集」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/aba84609-75a9-4f00-bf8a-2a85fb904d61.png)

* 「新しい証明書」を選択し、「保存」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/1c73e4a1-2970-438a-bcea-7fcbc64e1c9f.png)

* 「証明書(Base64)」のファイルをダウンロードしておきます。
    * 「拇印」は、`Authentication.json`の`FindValue`に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/6975fd98-da91-42e7-b48b-a4a74d100739.png)

#### 4.Pleasanter のセットアップ

* 以下の項目を控えておきます。

|項目|内容|
|---|---|
|ログイン URL|`Authentication.json`IdentityProvidersのSignOnUrl|
|Microsoft Entra 識別子|`Authentication.json`IdentityProvidersのEntityId|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/d9a4ca5e-dad7-4940-aaca-73700de847d3.png)


## 証明書のインストール
### PleasanterのAzure AppServiceに証明書インストール

* Azureポータル > プリザンターのWebアプリ > 証明書 > 公開キー証明書(.cer) > 証明書の追加　を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/f0a4f125-90f5-4839-b3f2-51484be86d15.png)

* Microsoft Entra管理センターからダウンロードした証明書を選択し、「追加」を選択
    * 上の手順で作成したSAML証明書

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/41a9dbf5-6ec8-47e1-b07e-23f6b2aeebe5.png)

## Pleasanter(SP)のAuthentication.jsonの登録

* Azureポータル > プリザンターのWebアプリ > App Service Editor(プレビュー) > エディタを開く　を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/9dcbac3c-ed0c-44e9-85bd-cc2beaa0e866.png)

* `Authentication.json`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/13c93394-ddc1-4e52-b8af-6f348aca7b4c.png)

* Authentication.jsonの必要項目を入力

|JSON|項目|内容|
|---|---|---|
|SamlParameters|Attributes|各属性クレームに合わせて修正してください。|
|SPOptions|EntityId|https://{プリザンターのURL}/Saml2|
|SPOptions|ReturnUrl|https://{プリザンターのURL}/Users/SamlLogin|
|IdentityProviders|EntityId|4.Pleasanter のセットアップで控えたMicrosoft Entra 識別子|
|IdentityProviders|SignOnUrl|4.Pleasanter のセットアップで控えたログイン URL|
|IdentityProviders/SigningCertificate|FindValue|3.SAML証明書で控えた拇印|

* 以下の様に必要項目を修正し、「SAVE」を選択

```json:Authentication.json

    "SamlParameters": {
        "Attributes": {
            "Name": "Name",
            "UserCode": "employeeId",
            "Birthday": "Birthday",
            "Gender": "Gender",
            "Language": "Language",
            "TimeZone": "TimeZone",
            "TenantManager": "TenantManager",
            "DeptCode": "Department",
            "Dept": "PhysicalDeliveryOfficeName",
            "Body": "JobTitle",
            "MailAddress": "{NameId}"
        },
        "SamlTenantId": 1,
        "DisableOverwriteName": false,
        "NotCreatePersistentCookie": false,
        "SPOptions": {
            "EntityId": "https://{PleasanterのURL}/Saml2",
            "ReturnUrl": "https://{PleasanterのURL}/Users/SamlLogin",
            "AuthenticateRequestSigningBehavior": "IfIdpWantAuthnRequestsSigned",
            "OutboundSigningAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256",
            "MinIncomingSigningAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256",
            "IgnoreMissingInResponseTo": false,
            "PublicOrigin": "https://{PleasanterのURL}",
            "ServiceCertificates": []
        },
        "IdentityProviders": [
            {
                "EntityId": "{控えておいたMicrosoft Entra 識別子}",
                "SignOnUrl": "{控えておいたログイン URL｝",
                "LogoutUrl": null,
                "AllowUnsolicitedAuthnResponse": true,
                "Binding": "HttpPost",
                "WantAuthnRequestsSigned": false,
                "DisableOutboundLogoutRequests": true,
                "LoadMetadata": false,
                "MetadataLocation": null,
                "SigningCertificate": {
                    "StoreName": "My",
                    "StoreLocation": "CurrentUser",
                    "X509FindType": "FindByThumbprint",
                    "FindValue": "{SAML証明画面の拇印}"
                }
            }
        ]
    }

```



## 起動確認

* Azureポータル上から再起動を行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/0fd80dd3-0d5e-4af0-9858-cf978b3b071b.png)

* 「SSO ログイン」がログイン画面に表示される
    * ユーザー名、パスワードは空欄のままで、「SSO ログイン」を選択し、ログインができるか確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90597/5da324f0-bf55-4fce-84ac-dd429542cd22.png)