SAML認証を利用する
## 制限事項
1. Pleasanter.net共有環境ではSAML認証は利用できません。
1. PleasanterにSP(Pleasanter)側のメタデータを発行する機能はありません。SP(Pleasanter)のメタデータをIdPに登録して連携することはできません。
## 概要
SAML認証を利用するための設定手順を記載します。
## 1. Authentication.jsonをSAML認証向けに構成
[Authentication.json](/ja/manual/authentication-json)を編集し、SAML認証向けに構成します。
##### Authentication.json設定例(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,
"DisableOverwriteName": false,
"NotCreatePersistentCookie": false,
"SPOptions": {
"EntityId": "http://localhost:59802/Saml2",
"ReturnUrl": "http://localhost:59802/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": null,
"SignOnUrl": null,
"LogoutUrl": null,
"AllowUnsolicitedAuthnResponse": true,
"Binding": "HttpPost",
"WantAuthnRequestsSigned": false,
"DisableOutboundLogoutRequests": true,
"LoadMetadata": false,
"MetadataLocation": null,
"SigningCertificate": {
"StoreName": "My",
"StoreLocation": "CurrentUser",
"X509FindType": "FindByThumbprint",
"FindValue": null
}
}
]
}
}
```
<a id=""></a>
## Authentication.jsonのSAML認証項目
|項目名|設定例|説明|
|-|-|-|
|Provider|SAML|SAMLを指定します。|
|SamlParameters.Attributes|JSONオブジェクト|下記<a href="#Attributes">SamlParameters.Attributes項目一覧</a>を参照。|
|SamlParameters.SamlTenantId|1|1固定|
|SamlParameters.DisableOverwriteName|false|ログイン時にユーザの「名前」をSAMLレスポンスの値で上書きしたくない場合にtrueを設定します。|
|SamlParameters.NotCreatePersistentCookie|false|SAML認証時に認証クッキーを永続化できないようにします。|
|SamlParameters.SPOptions|JSONオブジェクト|下記<a href="#SPOptions">SamlParameters.SPOptions項目一覧</a>を参照。|
|SamlParameters.IdentityProviders|JSONオブジェクト|下記<a href="#IdentityProviders">SamlParameters.IdentityProviders項目一覧</a>を参照|
<a id="Attributes"></a>
### SamlParameters.Attributes項目一覧
プリザンターのユーザ項目とSAMLレスポンスから取得可能な属性名との対応付けを行います。パラメータの左側(キー)がプリザンターのユーザ項目です。対応するSAMLレスポンスの属性名を右側に記載します。
|ユーザ項目名|既定値|説明|
|-|-|-|
|Name|Name|「名前」に設定する属性名を指定。FirstName,LastNameの項目を追加している場合、Nameにnullを指定することで、FirstNameとLastNameを組み合わせた値をNameに設定します。指定したSAML属性から値が取得できなかった場合、ログインIDが設定されます。詳細は「[FAQ:SAML認証で、ユーザ項目を「Name」の代わりに「givenName」と「surname」を結合して指定したい](https://pleasanter.org/ja/manual/faq-saml-sync-user-item-name)」を参照してください。|
|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)が存在しなかった場合は新しい組織が作成されます。詳細は「[FAQ:SAML認証で、ユーザ項目の「DeptCode」を指定せずに組織に反映したい](https://pleasanter.org/ja/manual/faq-saml-sync-user-item-dept)」を参照してください。|
|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レスポンスから渡されるユーザデータを基に、プリザンターのユーザを作成・更新します。
1. SAMLレスポンスのNameID要素に設定されているIDを「ログインID」として登録します。
1. 未登録の「ログインID」であった場合、その「ログインID」でユーザが新規に作成されます。
1. 登録済みの「ログインID」であった場合、その「ログインID」のユーザ情報が更新されます。
1. 同期するユーザ情報は[Authentication.json](/ja/manual/authentication-json)の__SamlParameters.Attributes__ で指定したSAMLレスポンスの属性名で検索します。SAMLレスポンスの該当する属性名が存在したのみ、その値をユーザ項目に設定します。
ユーザ項目と同期するSAMLレスポンスの属性名が不明の場合、SAMLログイン時に受け取ったレスポンスデータから確認する方法があります。確認手順は下記のリンク先をご確認ください。
[SAML認証設定でAuthentication.json に設定するSAMLレスポンスの属性名を確認したい](/manual/faq-saml-response)
<a id="SPOptions"></a>
### SamlParameters.SPOptions項目一覧
このセクションでは、サービスプロバイダ(=プリザンター)側の情報を設定します。
説明列の文字列【サーバ名】は環境に応じて読み替えてください。
|要素名|設定例|説明|
|-|-|-|
|EntityId|https://sso-pleasanter.com/pleasanter/Saml2|サービスプロバイダのEntity ID。<br>【サーバ名】/Saml2を指定します。|
|ReturnUrl|https://sso-pleasanter.com/pleasanter/Users/SamlLogin|認証成功後に遷移するリダイレクト先。<br>【サーバ名】/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|SAMLレスポンスに含まれるInResponseTo要素の検証をスキップする場合にtrueを設定します。|
|PublicOrigin|null|Saml2エンドポイントのベースURLを指定します。リバースプロキシやロードバランサ―を使用している場合など、サーバー内のURLと外部に公開しているURLが異なる場合に使用します。|
|ServiceCertificates|[]||
<a id="IdentityProviders"></a>
### 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プロバイダに送信する際に使用するバインディング。以下の値が設定可能です。<br>・HttpRedirect<br>・HttpPost<br>・Artifact|
|WantAuthnRequestsSigned|false||
|DisableOutboundLogoutRequests|true||
|LoadMetadata|false||
|MetadataLocation|null||
|SigningCertificate||以下の<a href="#SigningCertificate">SamlParameters.IdentityProviders.SigningCertificate項目一覧</a>を参照。|
<a id="SigningCertificate"></a>
#### SamlParameters.IdentityProviders.SigningCertificate項目一覧
このセクションでは、IDプロバイダがメッセージの署名に使用する証明書の情報を設定します。
|要素名|設定例|説明|
|-|-|-|
|StoreName|My|検索する証明書ストア名。設定可能な値は[マイクロソフト社のドキュメント](https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.x509certificates.storename)を参照。|
|StoreLocation|LocalMachine|検索する証明書ストア。設定可能な値は[マイクロソフト社のドキュメント](https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.x509certificates.storelocation)を参照。|
|X509FindType|FindByThumbprint|findValueの値との一致を検索するフィールド。設定可能な値は[マイクロソフト社のドキュメント](https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.x509certificates.x509findtype)を参照。|
|FindValue|50B459426DE554010B35E9XXXXXXXXXXXXXXXXX|証明書を検索する際の検索値。x509FindTypeで指定したフィールドで検索を行います。以下を参照。|
##### FindValueに設定する証明書の検索値(拇印)の確認方法
以下の手順で確認できます。より詳細な情報は、[Sustainsys.Saml2のドキュメント](https://saml2.sustainsys.com/en/v2/configuration.html#sustainsys-saml2-section)を参照してください。
1. Windowsキーを押しながら、Rキーを押してください。
1. 「ファイル名を指定して実行」ダイアログに「certlm.msc」と入力し、「OK」ボタンをクリックしてください。
2. 「管理コンソール」の「個人」-「証明書」から対象の証明書をダブルクリックしてください。
3. 「証明書情報」画面の「詳細」タブ-「拇印」フィールドの「値」に表示される文字列を確認してください。
## 2. IDプロバイダ側の設定
IDプロバイダ側の設定は、各IDプロバイダのドキュメントに従い、設定してください。
IDプロバイダ側で必要と思われるプリザンター側の情報は以下の通りです。
値列の【サーバ名】は環境に応じて読み替えてください。
|項目名|値<br>設定例|
|:--|:--|
|SPのEntity ID|【サーバ名】/Saml2<br>https://sso-pleasanter.com/pleasanter/Saml2|
|認証成功後に遷移するリダイレクトURL|【サーバ名】/Users/SamlLogin<br>https://sso-pleasanter.com/pleasanter/SamlLogin|
|ACS URL|【サーバ名】/Saml2/Acs<br>https://sso-pleasanter.com/pleasanter/Saml2/Acs|
## 3. SAMLログインの実行
[Authentication.json](/ja/manual/authentication-json)の編集が済んだら、IISを再起動してください。
再起動後、ブラウザからアクセスするとログイン画面にSAML認証用のログインボタン(「SSOログイン」ボタン)が表示されます。このボタンをクリックし、SAML認証の動作確認を行ってください。
## 対応バージョン
|対応バージョン|内容|
|:--|:--|
|1.4.8.0 以降|NotCreatePersistentCookieを追加|
|1.2.6.0 以降|機能追加|


