プリザンターでSAML認証を利用する
## 概要
SAML認証を利用するための設定について記載します。
## 対応バージョン
1. プリザンター 1.2.6.0 以降
## 1. Authentication.jsonを編集する
Authentication.jsonをSAML連携用に構成します。
Authentication.jsonは標準構成で下記ディレクトリに配置されています。
```
C:¥web¥pleasanter¥Implem.Pleasanter¥App_Data¥Parameters
```
- 設定例(SAML認証に関連する項目のみ抜粋)
```json
{
"Provider": "SAML",
// ~中略~
"SamlParameters": {
"Attributes": {
"Name": "Name",
"UserCode": "UserCode",
"Birthday": "Birthday",
"Gender": "Gender",
"Language": "Language",
"TimeZone": "TimeZone",
"TenantManager": "TenantManager",
"DeptCode": "DeptCode",
"Dept": "Dept",
"Body": "Body",
"MailAddress": "{NameId}"
},
"SamlTenantId": 1,
"SPOptions": {
"EntityId": "https://sso-pleasanter.com/pleasanter/Saml2",
"ReturnUrl": "https://sso-pleasanter.com/pleasanter/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": null,
"ServiceCertificates": []
},
"IdentityProviders": [
{
"EntityId": "https://id-provider.com/saml",
"SignOnUrl": "https://id-provider.com/saml/login",
"LogoutUrl": null,
"AllowUnsolicitedAuthnResponse": true,
"Binding": "HttpPost",
"WantAuthnRequestsSigned": false,
"DisableOutboundLogoutRequests": true,
"LoadMetadata": false,
"MetadataLocation": null,
"SigningCertificate": {
"StoreName": "My",
"StoreLocation": "LocalMachine",
"X509FindType": "FindByThumbprint",
"FindValue": "50B459426DE554010B35E9XXXXXXXXXXXXXXXXX"
}
}
]
}
}
```
#### Authentication.json SAML認証項目一覧
|項目名|設定例|説明|
|-|-|-|
|Provider|"SAML"|"SAML"固定|
|SamlParameters.Attributes|(`SamlParameters.Attributes` 項目一覧を参照)|プリザンターのユーザー項目とSAMLレスポンスから取得可能な属性名との対応付けを行います。パラメータの左側(キー)がプリザンターのユーザー項目です。対応するSAMLレスポンスの属性名を右側に記載します。|
|SamlParameters.SamlTenantId|1|1固定|
### ユーザー項目の同期について
SAML認証でのログインが成功すると、SAMLレスポンスから渡されるユーザーデータを基に、プリザンターのユーザーを作成・更新します。
- SAMLレスポンスのNameID要素に設定されているIDをログインIDとして登録します。
- 未登録のログインIDであった場合、そのログインIDでユーザーが新規に作成されます。
- 登録済みのログインIDであった場合、そのログインIDのユーザー情報が更新されます。
- 同期するユーザー情報はAuthentication.jsonの__SamlParameters.Attributes__ で指定したSAMLレスポンスの属性名で検索します。SAMLレスポンス該当する属性名が存在したのみ、その値をユーザー項目に設定します。
#### `SamlParameters.Attributes` 項目一覧
|ユーザー項目名|既定値|説明|
|-|-|-|
|Name|"Name"|「名前」に設定する属性名を指定。FirstName,LastNameの項目を追加している場合、Nameにnullを指定することで、FirstNameとLastNameを組み合わせた値をNameに設定します。指定したSAML属性から値が取得できなかった場合、ログインIDが設定されます。|
|UserCode|"UserCode"|「ユーザーコード」に設定する属性名を指定します。|
|Birthday|"Birthday"|「生年月日」に設定する属性名を指定します。|
|Gender|"Gender"|「性別」に設定する属性名を指定します。|
|Language|"Language"|[言語](/ja/manual/faq-supported-language)に設定する属性名を指定します。|
|TimeZone|"TimeZone"|[タイムゾーン](/ja/manual/faq-supported-language)に設定する属性名を指定します。|
|TenantManager|"TenantManager"|[テナント管理者](/ja/manual/user-management-tenant-manager)に設定する属性名を指定します。属性値が"true"のの場合にそのユーザーがテナント管理者として登録されます。|
|DeptCode|"DeptCode"|「組織コード」に設定する属性名を指定します。ここで取得した組織コードを持つ[組織](/ja/manual/table-management-choices-text-depts)がこのユーザーに割り当てられます。該当する[組織](/ja/manual/table-management-choices-text-depts)が存在しな買った場合は新しい組織が作成されます。|
|Dept|"Dept"|「組織名」に設定する属性名を指定します。「DeptCode」から引き当てた[組織](/ja/manual/table-management-choices-text-depts)の組織名を更新します。該当する組織が存在しなかった場合はこの「組織名」で組織が作成されます。|
|Body|"Body"|[説明](/ja/manual/table-management-column-description)に設定する属性名を指定します。|
|MailAddress|"{NameId}"|「メールアドレス」に設定する属性名を指定します。NameID要素がメールアドレスの場合、"{NameId}"と指定することでNameIDの値を「メールアドレス」として登録可能です。|
※ ユーザー項目と同期するSAMLレスポンスの属性名が不明の場合、SAMLログイン時に受け取ったレスポンスデータから確認する方法があります。確認手順は下記のリンク先をご確認ください。
[
SAML認証設定でAuthentication.json に設定するSAMLレスポンスの属性名を確認したい](/manual/faq-saml-response)
### `SamlParameters.SPOptions`
このセクションでは、サービスプロバイダ(=プリザンター)側の情報を設定します。
|要素名|設定例|説明|
|-|-|-|
|EntityId|https://sso-pleasanter.com/pleasanter/Saml2|サービスプロバイダのEntity ID。 "{ServerName}/Saml2"を指定します。※1|
|ReturnUrl|https://sso-pleasanter.com/pleasanter/Users/SamlLogin|認証成功後に遷移するリダイレクト先。"{ServerName}/Users/SamlLogin" を指定します。※1|
|AuthenticateRequestSigningBehavior|IfIdpWantAuthnRequestsSigned||
|OutboundSigningAlgorithm|http://www.w3.org/2001/04/xmldsig-more#rsa-sha256||
|MinIncomingSigningAlgorithm|http://www.w3.org/2001/04/xmldsig-more#rsa-sha256||
|DisableOverwriteName|false|ログイン時にユーザーの「名前」をSAMLレスポンスの値で上書きしたくない場合に"true"を設定します。|
|IgnoreMissingInResponseTo|false|SAMLレスポンスに含まれるInResponseTo要素の検証をスキップする場合に"true"を設定します。|
|PublicOrigin|null|Saml2エンドポイントのベースURLを指定します。リバースプロキシやロードバランサ―を使用している場合など、サーバー内のURLと外部に公開しているURLが異なる場合に使用します。|
|ServiceCertificates|[]||
- ※1 {ServerName}は環境に応じて置き換えてください。
### `SamlParameters.IdentityProviders`
このセクションでは、IDプロバイダ側の情報を設定します。
|要素名|設定例|説明|
|-|-|-|
|EntityId|https://id-provider.com/saml|IDプロバイダのEntity IDを指定します。|
|SignOnUrl|https://id-provider.com/saml/login|IDプロバイダのログインURLを指定します。|
|LogoutUrl|null|
|AllowUnsolicitedAuthnResponse|true|非要請応答を許可します。IdP-Initiatedを利用する場合はtrueを指定します。|
|Binding|HttpPost|SAMLリクエストをIDプロバイダに送信する際に使用するバインディング。以下の値が設定可能です。 HttpRedirect / HttpPost / Artifact|
|WantAuthnRequestsSigned|false|
|DisableOutboundLogoutRequests|true|
|LoadMetadata|false|
|MetadataLocation|null|
### `SamlParameters.IdentityProviders.SigningCertificate`
このセクションでは、IDプロバイダがメッセージの署名に使用する証明書の情報を設定します。
|要素名|設定例|説明|
|-|-|-|
|StoreName|My|検索する証明書ストア名。設定可能な値は※2を参照|
|StoreLocation|LocalMachine|検索する証明書ストア。設定可能な値は※3を参照|
|X509FindType|FindByThumbprint|findValueの値との一致を検索するフィールド。設定可能な値は※4を参照|
|FindValue|50B459426DE554010B35E9XXXXXXXXXXXXXXXXX|証明書を検索する際の検索値。x509FindTypeで指定したフィールドで検索を行います。設定値については※5を参照|
- ※2 https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.x509certificates.storename
- ※3 https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.x509certificates.storelocation
- ※4 https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.x509certificates.x509findtype
- ※5 FindValueに設定する証明書の検索値(拇印)は以下の手順で確認できます。
1. [Windows]キー+[R]を押下し、ファイル名を指定して実行ダイアログに「certlm.msc」を入力して「OK」
2. 管理コンソールの「個人」-「証明書」から対象の証明書をダブルクリック(または右クリックで「開く」)
3. 証明書情報画面の「詳細」タブ-「拇印」フィールドの「値」に表示される文字列
より詳細な情報は、Sustainsys.Saml2のドキュメントを参照してください。
https://saml2.sustainsys.com/en/v2/configuration.html#sustainsys-saml2-section
## 2. IDプロバイダ側の設定
IDプロバイダ側の設定は、各IDプロバイダのマニュアル等にしたがって設定してください。
IDプロバイダ側で必要と思われるプリザンター側の情報は以下の通りです。
|項目名|値|
|-|-|
|SPのEntity ID|"{ServerName}/Saml2" ※6|
|認証成功後に遷移するリダイレクトURL|"{ServerName}/Users/SamlLogin" ※6|
|ACS URL|"{ServerName}/Saml2/Acs"|
- ※6 {ServerName}は環境に応じて置き換えて設定してください。
(例:https://sso-pleasanter.com/pleasanter/Saml2)
## 3. SAMLログインの実行
Authentication.jsonの編集が完了したら、IISを再起動してください。
再起動後、ブラウザからアクセスするとログイン画面にSAML認証用のログインボタンが表示されるようになります。(「SSOログイン」ボタン)このボタンをクリックしてSAML認証の動作確認を行ってください。
## 制限事項
PleasanterにSP(Pleasanter)側のメタデータを発行する機能はございません。SP(Pleasanter)のメタデータをIdPに登録して連携することはできません。