# SSO設定

このページでは、認証方法全般に適用されるトピックを扱います。

## 複数のプロバイダ

同時に複数の認証方法を有効にすることができます。有効にした各プロバイダは、ログインページに標準のユーザー名/パスワードフォームと並んで独自のボタンとして表示されます。ユーザーは好みの方法を選択できます。

外部プロバイダが誤って設定されている場合でもプラットフォーム管理者が常にログインできるように、標準フォームを有効にしておいてください。

## 認証の優先順位

複数の方法が有効になっている場合、システムは以下の順序で認証情報を確認します：

1. LDAP（`force_as_login_method` が設定されている場合）
2. OAuth2プロバイダ（`authentication.yaml` に記載されている順序）
3. 内部のChamiloデータベース

## APIアクセスのためのJWTトークン

ChamiloはREST APIにJWT（JSON Web Tokens）を使用します。トークンの有効期間やリフレッシュの動作は、`config/packages/lexik_jwt_authentication.yaml` で設定されます。これはSSOログインフローとは別のもので、APIクライアントにのみ適用されます。

## トラブルシューティング

### 設定後にログインボタンが表示されない

`authentication.yaml` を変更するたびにキャッシュをクリアする必要があります：

```bash
php bin/console cache:clear && php bin/console cache:warmup
```

### ユーザーがSSO経由でログインできない

* **リダイレクトURIの不一致** — アイデンティティプロバイダに登録されているURIは、`https://your-chamilo-url/connect/<provider>/check` と完全に一致する必要があります。
* **時計のずれ** — SSOトークンは時間に敏感です。サーバーの時計が同期されていることを確認してください（NTP）。
* **SSL証明書** — Chamiloはアイデンティティプロバイダの証明書を信頼する必要があります。自己署名証明書の問題がないか確認してください。
* **ログ** — 具体的なエラーメッセージを確認するために、`var/log/` およびアイデンティティプロバイダのログを確認してください。

### ユーザーが間違った役割で作成される

プロバイダの役割マッピング設定を確認してください。新しいユーザーは、グループまたは属性マッピングで昇格されない限り、デフォルトで学生の役割になります。

### プロバイダにユーザーが存在するがChamiloにアクセスできない

* `allow_create_new_users` がfalseの場合、ユーザーはプロバイダのデータと一致するメールアドレスまたはユーザー名を持つChamiloアカウントをすでに持っている必要があります。
* ユーザーがChamiloで無効化されていないことを確認してください。
* Azureの場合、Chamiloが受信したユーザーを既存のアカウントとどのように一致させるかを理解するために、`existing_user_verification_order` を確認してください。


---

# Agent Instructions: 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:

```
GET https://docs.chamilo.org/2.x-ja/gaido-1/admin-guide/authentication/sso-configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
