> 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/oidc-authentication.md).

# OIDC 認証

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

### 設定

内部的には、Overleaf の OIDC モジュールは [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) ライブラリを使用しています。OpenID Connect の設定で問題が発生している場合は、次の README を読むとよいでしょう: `passport-openidconnect` 。期待されている設定の内容を把握するために。

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

例: `EXTERNAL_AUTH=ldap oidc`

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

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

次の `externalUserId` は、IdP サーバーから返されるプロファイル内のユーザー ID と一致している必要があります（参照: `OVERLEAF_OIDC_USER_ID_FIELD` 環境変数）。また、 `providerId` は、OIDC プロバイダの ID と一致している必要があります（参照: `OVERLEAF_OIDC_PROVIDER_ID`).

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

* そのようなユーザーが見つかると、 `thirdPartyIdentifiers` フィールドが更新されます。
* 一致するユーザーが見つからず、JIT アカウント作成が無効になっていない場合、新しいユーザーがメールアドレスと `thirdPartyIdentifiers` IdP プロファイルの情報から作成されます。

いずれの場合も、ユーザーは外部 OIDC ユーザーに「リンクされている」と見なされます。ユーザーは次の場所で OIDC プロバイダからリンク解除できます。 `/user/settings` ページ。

#### 環境変数

以下の 5 つの必須変数の値は、次の方法で確認できます: `.well-known/openid-configuration` OpenID プロバイダ (OP) のエンドポイントです。

* `OVERLEAF_OIDC_ISSUER` **(必須)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(必須)**
* `OVERLEAF_OIDC_TOKEN_URL` **(必須)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(必須)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(必須)**

以下の 2 つの必須変数の値は、OP の管理者から提供されます

* `OVERLEAF_OIDC_CLIENT_ID` **(必須)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(必須)**
* `OVERLEAF_OIDC_SCOPE`
  * デフォルト: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * OP の任意の ID。デフォルトは `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * OP の名前。次の場所で使用されます: `リンク済みアカウント` セクションの `/user/settings` ページ。デフォルトは `OIDC プロバイダ`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * アイデンティティサービスの表示名。ログインページで使用されます（デフォルト: `$OVERLEAF_OIDC_PROVIDER_NAME でログイン`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * OP の説明。次の `リンク済みアカウント` セクションで使用されます（デフォルト: `$OVERLEAF_OIDC_PROVIDER_NAME でログイン`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `詳細はこちら` OP の説明に表示する URL。デフォルト: なし `詳細はこちら` 説明にはリンクを表示しません。
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * OP を表示しません。 `/user/settings` ページで、ユーザーのアカウントが OP とリンクされていない場合。デフォルト `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * この属性の値は Overleaf により外部ユーザー ID として使用されます。デフォルトは `id`。ほかに適切な値としては `email` および `ユーザー名` （対応するのは `preferred_username` OIDC クレームです）。
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * OIDC 経由で認証するユーザーの Just-in-Time (JIT) アカウント作成を制限します。カンマ区切りのドメイン名の一覧を設定すると、ユーザーのメールアドレスのドメインが一覧のいずれかと一致する場合にのみ新しいアカウントが作成されます。ドメインが一致しない場合、管理者は OIDC ユーザーのメールアドレスを使ってユーザーアカウントを手動で作成する必要があります。その際、強力なランダムパスワードを設定するか、できればその `hashedPassword` フィールドを一切使わないようにしてください。ドメイン名の先頭には `*.` サブドメインに一致させるためのワイルドカードを付けることができます。
    * 例: 次のようなメールアドレスのユーザーに対して JIT アカウント作成を許可するには `name@example.com` および `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * 例: JIT アカウント作成を完全に無効にするには:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * に設定すると `true`、ログイン時にユーザーの項目を更新し、 `first_name` および `last_name` ユーザー詳細フォームを無効にします。 `/user/settings` ページ。
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` および `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * 両方の環境変数が設定されている場合、ログイン処理は次を更新します `user.isAdmin = true` OP から返されるプロファイルに、次で指定された属性が含まれている場合 `OVERLEAF_OIDC_IS_ADMIN_FIELD` 、その値が `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`、それ以外の場合 `user.isAdmin` は次に設定されます `false`に一致すれば、 `OVERLEAF_OIDC_IS_ADMIN_FIELD` である場合 `email` そのとき、属性の値 `emails[0].value` が一致確認に使用されます。

OpenID プロバイダのリダイレクト URL は `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>variables.env のサンプルファイル</summary>

{% code title="variables.env" overflow="wrap" %}

```dotenv
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

#################
## CE 用 OIDC ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Keycloak OIDC プロバイダでログイン'
OVERLEAF_OIDC_PROVIDER_NAME=OIDC Keycloak プロバイダ
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

</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/oidc-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.
