> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/ja/she-ding/overleaf-toolkit/authentication/saml-authentication.md).

# SAML 認証

この機能は以下によって開発されました [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep)。ここでは、設定用のドキュメントをいくつか提供します。

### 設定

Overleaf の SAML モジュールは内部的に [passport-saml](https://github.com/node-saml/passport-saml) ライブラリを使用しており、以下の設定オプションのほとんどは `passport-saml`に渡されます。SAML の設定で問題が発生している場合は、 `passport-saml` 。期待されている設定の内容を把握するために。

環境変数 `EXTERNAL_AUTH` SAML 認証モジュールを有効にするために必要です。この環境変数は、どの外部認証方式が有効化されるかを指定します。この変数の値はリストです。リストに `saml` が含まれている場合、SAML 認証が有効になります。

例: `EXTERNAL_AUTH=ldap saml`

SAML 認証方式を使用すると、ユーザーは Identity Provider (IdP) の認証サイトにリダイレクトされます。IdP がユーザーの認証に成功すると、Overleaf のユーザーデータベースで `samlIdentifiers` フィールドは次のような構造です:

```json
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

次の `externalUserId` の値は、 `userIdAttribute` で指定されたプロパティの値と一致している必要があります。

一致するレコードが見つからない場合、データベースで IdP ユーザープロファイルのメールアドレスと一致する主メールアドレスを持つユーザーが検索されます:

* そのようなユーザーが見つかると、 `hashedPassword` フィールドはローカル認証を無効にするために削除され、 `samlIdentifiers` フィールドが追加されます。
* 一致するユーザーが見つからない場合は、メールアドレスと `samlIdentifiers` IdP プロファイルの情報から作成されます。

**注:** 現在サポートされている SAML IdP は 1 つだけです。 `providerId` フィールドは `samlIdentifiers` に固定されています。 `'1'`.

#### 環境変数

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * アイデンティティサービスの表示名。ログインページで使用されます（デフォルト: `SAML IdP でログイン`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * この属性の値は Overleaf により外部ユーザー ID として使用されます。デフォルトは `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * ユーザープロファイル内の Email フィールド名。デフォルトは `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * ユーザープロファイル内の firstName フィールド名。デフォルトは `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * ユーザープロファイル内の lastName フィールド名。デフォルトは `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * に設定すると `true`、ログイン時にユーザーの項目を更新し、 `first_name` および `last_name` ログイン時にフィールドを更新し、ユーザー詳細フォームをオフにします `/user/settings` ページ。
* `OVERLEAF_SAML_ENTRYPOINT` **(必須)**
  * SAML アイデンティティサービスのエントリポイント URL。
    * 例: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Azure の例: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(必須)**
  * 発行者名。
* `OVERLEAF_SAML_AUDIENCE`
  * 期待される SAML 応答の Audience。デフォルトは `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(必須)**
  * Identity Provider の公開証明書を含むファイルへのパスです。受信した SAML 応答の署名を検証するために使用されます。Identity Provider に有効な署名証明書が複数ある場合は、それらの証明書へのパスを JSON 配列で指定できます。
    * 例（証明書 1 つ）: `/var/lib/overleaf/certs/idp_cert.pem`
    * 例（複数の証明書）: `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * IdP が受信する SAML Request の署名を検証できるよう、認証リクエストに埋め込むための公開署名証明書を含むファイルへのパスです。 [メタデータエンドポイント](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) ストラテジーが `OVERLEAF_SAML_PRIVATE_KEY`で設定されている場合に必要です。証明書ローテーションをサポートするために、証明書のパスを JSON 配列で指定できます。証明書の配列を指定する場合、配列の最初の要素は現在の `OVERLEAF_SAML_PRIVATE_KEY`と一致している必要があります。配列内の追加要素は、 `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * PEM 形式の秘密鍵を含むファイルへのパスです。 `OVERLEAF_SAML_PUBLIC_CERT` passport-saml によって送信される認証リクエストの署名に使用されます。
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * 公開証明書を含むファイルへのパスです。 [メタデータエンドポイント](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * 秘密鍵を含むファイルへのパスです。 `OVERLEAF_SAML_DECRYPTION_CERT` 受信した暗号化アサーションの復号を試みるために使用されます。
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * 必要に応じて、署名リクエストに使用する署名アルゴリズムを設定します。有効な値は 'sha1'（デフォルト）、'sha256'（推奨）、'sha512'（最も安全。IdP がサポートしているか確認してください）です。
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * すべてのリクエストに追加する追加クエリパラメータの JSON 辞書。
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * 'authorize' リクエストに追加する追加クエリパラメータの JSON 辞書。
    * 例: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Identity Provider に要求する Name Identifier 形式（デフォルト: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`）。使用する場合 `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`、 `OVERLEAF_SAML_EMAIL_FIELD` 環境変数が定義されていることを確認してください。 `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` が必要な場合は、次の `OVERLEAF_SAML_ID_FIELD` 環境変数も定義する必要があります。たとえば、ユーザーのメールアドレスに設定できます。
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * OnBefore と NotOnOrAfter のアサーション条件の有効性タイムスタンプを確認する際に、クライアントとサーバーの間で許容されるずれのミリ秒数。-1 に設定すると、これらの条件の確認を完全に無効化します。デフォルトは 0 です。
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` IdP に応答へ添付する属性セットを指示するため、AuthnRequest に追加する属性（[リンク](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * 認証コンテキストを要求するための Name Identifier 形式値の JSON 配列。デフォルト: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * もし `true`の場合、サービスプロバイダーからの最初の SAML リクエストは、たとえ有効なセッションを保持していても、IdP がユーザーに再認証を強制すべきであることを指定します。
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * もし `true`の場合、特定の認証コンテキストを要求しません。たとえば、これを `true` に設定して、パスワードレスログインなどの追加コンテキストを許可できます（`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`）。追加コンテキストのサポートは IdP に依存します。
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * に設定すると `HTTP-POST`の場合、HTTP POST バインディング経由で IdP に認証を要求し、それ以外の場合はデフォルトで HTTP-Redirect になります。
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * もし `always`の場合、InResponseTo は受信した SAML 応答から検証されます。
  * もし `決して`の場合、InResponseTo は検証されません（デフォルト）。
  * もし `ifPresent`の場合、InResponseTo は受信した SAML 応答に存在する場合のみ検証されます。
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` および `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * に設定すると `true` （デフォルト）では、Overleaf は SAML Assertions、または SAML Authentication Response 全体が IdP によって署名されていることを期待します。両方のオプションが `false`の場合、少なくともアサーションまたは応答のどちらか一方に署名されている必要があります。
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * SAML リクエスト用に生成された Request ID が、SAML 応答の `InResponseTo` フィールド内で参照された場合に有効でなくなる期限を定義します。デフォルト: 28800000（8 時間）。
* `OVERLEAF_SAML_LOGOUT_URL`
  * ログアウトリクエストで呼び出すベースアドレス（デフォルト: `entryPoint`).
    * 例: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * 'logout' リクエストに追加する追加クエリパラメータの JSON 辞書。
* `OVERLEAF_SAML_IS_ADMIN_FIELD` および `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * 両方の環境変数が設定されている場合、ログイン処理は次を更新します `user.isAdmin = true` SAML IdP が返すプロファイルに、 `OVERLEAF_SAML_IS_ADMIN_FIELD` その値が次のいずれかに一致する場合 `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` または、次を含む配列である場合 `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`、それ以外の場合 `user.isAdmin` は次に設定されます `false`。これらの変数のいずれかが設定されていない場合、管理者ステータスは次にのみ設定されます `true` Launchpad で管理者ユーザーを作成するとき。

**Identity Provider のメタデータ**

現在の Overleaf CE のバージョンには、Service Provider メタデータを取得するためのエンドポイントが含まれています: `http://my-overleaf-instance.com/saml/meta`

Identity Provider には、Overleaf サーバーを「Service Provider」として認識するよう設定する必要があります。これを行う方法については、SAML サーバーのドキュメントを参照してください。

以下は適切な Service Provider メタデータの例です:

<details>

<summary><strong>ol-meta.xml</strong></summary>

```
<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                  entityID="MyOverleaf"
                  ID="_b508c83b7dda452f5b269383fb391107116f8f57">
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
    <KeyDescriptor use="signing">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[省略]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[省略]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                         Location="https://my-overleaf-instance.com/saml/logout/callback"/>
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
    <AssertionConsumerService index="1"
                              isDefault="true"
                              Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                              Location="https://my-overleaf-instance.com/saml/login/callback"/>
  </SPSSODescriptor>
</EntityDescriptor>

```

</details>

証明書に注意してください、 `AssertionConsumerService.Location`, `SingleLogoutService.Location` および `EntityDescriptor.entityID` を適切に IdP 設定に設定するか、メタデータファイルを IdP 管理者に送ってください。

<details>

<summary><strong>サンプル variables.env ファイル（最小）</strong></summary>

<pre><code>OVERLEAF_APP_NAME="私たちの Overleaf インスタンス"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# ImageMagick を使用したサムネイル生成を有効にします
ENABLE_CONVERSIONS=true

# メール確認の要件を無効にします
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## nginx-proxy 経由の TLS 用に設定
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=私たちの Overleaf インスタンス
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "サポートチームに連絡する", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"こんにちは、私は右側です", "url":"https://github.com/yu-i-i/overleaf-cep"}]

OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
OVERLEAF_EMAIL_SMTP_PORT=587
OVERLEAF_EMAIL_SMTP_SECURE=false
# OVERLEAF_EMAIL_SMTP_USER=
# OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
OVERLEAF_EMAIL_SMTP_LOGGER=false
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
OVERLEAF_CUSTOM_EMAIL_FOOTER=このシステムは x 部門によって運用されています

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
##     SAML    ##
#################

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='SAML プロバイダーでログイン'
OVERLEAF_SAML_EMAIL_FIELD=Email
OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
<strong>OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
</strong>OVERLEAF_SAML_SIGNATURE_ALGORITHM=
</code></pre>

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/ja/she-ding/overleaf-toolkit/authentication/saml-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
