CAS
DrupalウェブサイトにCentral Authentication Service(CAS)シングルサインオン認証を提供します。
cas
インストール
composer require 'drupal/cas:^2.3'
概要
CASモジュールは、Central Authentication Service(CAS)プロトコルを実装します。これはウェブ用のシングルサインオン/シングルサインオフプロトコルで、ユーザーが中央のCASサーバーアプリケーションに一度だけ認証情報を提供することで、複数のアプリケーションにアクセスできるようにします。
CASのようなシングルサインオンサービスを使用することは、利便性(ユーザーが複数のウェブサービスの認証情報を覚える必要がない)とセキュリティ(Drupalウェブサイトがユーザーのパスワードを見ることがない)の両面で有益です。このモジュールはCASプロトコルのバージョン1、2、3を実装しています。
主な機能には、自動ユーザー登録、特定ページでの強制ログイン、ユーザーがすでにアクティブなCASセッションを持っている場合のシームレスなログインのためのゲートウェイ認証、シングルログアウトサポート、CASプロキシ機能、および他のモジュールがサブスクライブできるイベントによる広範なカスタマイズが含まれます。
Features
- CASプロトコルバージョン1.0、2.0、3.0によるシングルサインオン(SSO)認証
- 設定可能なメール割り当て戦略を持つ初回CASログイン用の自動ユーザー登録
- 特定のページまたはパスでCAS認証を要求する強制ログイン機能
- 認証を強制せずに既存のアクティブなCASセッションを持つユーザー向けのゲートウェイログイン(自動ログイン)
- CASサーバーからログアウトしたときにDrupalからもユーザーをログアウトさせるシングルログアウト(SLO)サポート
- 他のサービスからCAS保護リソースにアクセスするためのCASプロキシサポート
- CASユーザーの通常のDrupalログインの防止(推奨セキュリティ機能)
- CASユーザーのパスワードおよびメール管理の制限
- ユーザー登録時の自動ロール割り当て
- トークン置換をサポートする設定可能なエラーメッセージ
- CAS認証の問題をトラブルシューティングするためのデバッグログ
- CASユーザーを事前登録するための一括ユーザー作成
- 管理者向けのユーザープロフィールフォームでのCASユーザー名管理
- シームレスなアクセス拒否からログインへのフローのための「r4032login」モジュールとの連携
- 他のモジュールが認証プロセスにフックできるイベント駆動型アーキテクチャ
- クライアント側およびサーバー側のゲートウェイリダイレクト方式
- Drupal 7からDrupal 10以降へのCASユーザー移行サポート
Use Cases
エンタープライズシングルサインオン
ユーザーが企業の認証情報で一度認証すると、Drupalサイトと他のCAS対応アプリケーションにアクセスできる組織向けにCAS認証をデプロイします。セキュリティのために「通常ログインを防止」と「パスワード管理を制限」を有効にし、オンボーディングを効率化するために自動ユーザー登録を設定します。
大学ポータル連携
Drupalサイトを大学の既存のCASインフラストラクチャと統合します。学生とスタッフは大学の認証情報を使用してログインします。CAS Attributesモジュールを使用して、CASサーバーから返される学部や学生ステータスなどの属性に基づいてロールを自動的に割り当てます。
シームレス認証のイントラネット
組織のCASサーバーに既に認証されているユーザーが、追加の操作なしに自動的にDrupalにログインするイントラネットサイト向けにゲートウェイログインを設定します。これにより、内部ユーザーにシームレスな体験を提供します。
制限されたコンテンツへのアクセス
特定のコンテンツパス(/adminや/private/*など)で強制ログインを使用して、機密性の高いエリアへのアクセスにCAS認証を要求しながら、サイトの他の部分は公開アクセス可能なままにします。r4032loginモジュールと組み合わせて、アクセス拒否ページでの自動認証を実現します。
シングルログアウトを持つマルチサイトSSO
シングルログアウト(SLO)を有効にして、ユーザーがCASサーバーまたは他のCAS対応アプリケーションからログアウトすると、Drupalサイトからも自動的にログアウトされるようにし、すべてのアプリケーション間で一貫したセッション状態を維持します。
Webサービス向けプロキシ認証
CASプロキシ機能を設定して、初回認証時に取得したプロキシチケットを使用して、認証されたユーザーに代わってDrupalサイトが他のCAS保護リソース(WebサービスやAPIなど)にアクセスできるようにします。
事前プロビジョニングされたユーザーアカウント
CASユーザー一括追加機能を使用して、ユーザーが初めて認証する前に特定のロールを持つユーザーアカウントを事前登録します。これは、初回ログイン前にアカウントが存在する必要がある履修登録システムや従業員オンボーディングに役立ちます。
Tips
- 認証チケットを保護するため、本番環境ではCASサーバーとの通信に常にHTTPSを使用してください
- Tokenモジュールをインストールして、CASログインURLなどの動的な値でエラーメッセージをカスタマイズするための利用可能なトークンを確認してください
- 初期設定時に設定の問題を診断するために一時的にデバッグログを使用しますが、ログをクリーンに保つために本番環境では無効にしてください
- /casloginパス(または/casレガシーパス)は、サイトのどこからでもリンクしてCAS認証をトリガーできます
- 認証後にユーザーを特定のページにリダイレクトするには、/caslogin URLに「destination」クエリパラメータを追加してください:/caslogin?destination=/node/123
- CASサーバーがDrupalフィールドまたはロールにマッピングする必要があるユーザー属性を返す場合は、CAS Attributesモジュールの使用を検討してください
- ゲートウェイログインを使用する高トラフィックサイトでは、ページキャッシュの互換性を維持するためにクライアント側リダイレクト方式を優先してください
- 強制ログインが有効で認証が失敗した場合のリダイレクトループを防ぐために、ログイン失敗ページを設定してください
Technical Details
Admin Pages 2
/admin/config/people/cas
CASシングルサインオン認証のためのCASサーバー接続、認証動作、ユーザーアカウント処理、エラーメッセージ、および詳細オプションを設定します。
/admin/people/create/cas-bulk
CASユーザー名を指定して1人以上のCASユーザーを事前登録し、初めて認証する前にCASを使用してログインできるようにします。
権限 2
Hooks 8
hook_cron
古いプロキシグランティングチケット(1時間以上経過)と、設定された有効期間に基づいて期限切れのシングルログアウトセッションマッピングデータをクリーンアップします。
hook_user_role_delete
設定エラーを防ぐために、削除されたロールを自動割り当てロール設定から削除します。
hook_user_logout
ユーザーがDrupalからログアウトしたときに、cas_login_dataテーブルからセッションデータを削除します。
hook_form_user_form_alter
ユーザーエンティティフォームにCASユーザー名フィールドを追加し、管理者がCASユーザー名をDrupalアカウントに関連付けることを可能にします。
hook_form_user_login_form_alter
設定されている場合、標準のDrupalログインフォームにCASログインリンクを追加し、CASユーザーが通常のログインを使用することを防止します。
hook_form_user_pass_alter
制限されている場合にCASユーザーがDrupalパスワードをリセットすることを防止するために、パスワードリセットフォームにバリデーションを追加します。
hook_validation_constraint_alter
コアのProtectedUserFieldConstraintを、CASユーザーのパスワード管理制限が有効な場合にバリデーションをスキップするデコレートされたバージョンに置き換えます。
hook_menu_links_discovered_alter
Admin Toolbar Toolsモジュールが有効な場合、ユーザー管理メニューに「CASユーザーを追加」メニュー項目を追加します。
Troubleshooting 7
詳細設定でデバッグログを有効にして、詳細なエラーメッセージを確認してください。一般的な原因には、CASサーバーのホスト名/ポートの誤り、SSL証明書検証の失敗、またはDrupalサーバーとCASサーバー間のネットワーク接続の問題があります。
自己署名証明書またはプライベートCAを使用している場合は、CA証明書をウェブサーバーの信頼ストアに追加するか、CAS設定でカスタムCA証明書パスを設定してください。本番環境ではSSL検証を無効にしないでください。
「ユーザー登録時にロールを自動割り当て」設定でロールが選択されていることを確認してください。属性に基づくロール割り当てには、CAS Attributesモジュールをインストールして設定してください。
クライアント側リダイレクト方式を使用している場合、ゲートウェイ再確認時間が「ページリクエストごと」に設定されていないことを確認してください。また、ゲートウェイパスが正しく設定されており、CAS関連パスが含まれていないことを確認してください。
CASサーバーがSLOをサポートし、ログアウトリクエストを送信するように適切に設定されていることを確認してください。cas_login_dataテーブルにデータが入力されていることを確認してください(セッションIDが保存されています)。注意:SLOにはハッシュ化されていないセッションIDの保存が必要です。
ユーザーアカウント処理設定で「パスワード管理を制限」を有効にしてください。これにより、CASユーザーがパスワードを忘れた機能を使用することを防止します。
authmapテーブルにユーザーアカウントのCASユーザー名の関連付けがあることを確認してください。管理者は、「CAS経由でのログインを許可」を有効にしてCASユーザー名を入力することで、ユーザープロフィールフォームでこれを設定できます。
Security Notes 6
- シングルログアウト(SLO)はセッションIDをハッシュ化せずにデータベースに保存します。これはDrupalのデフォルトのセッションセキュリティ強化からの逸脱です。組織の認証ポリシーで必要な場合にのみSLOを有効にしてください。
- 本番環境ではSSL証明書の検証を無効にしないでください。これにより、サイトが中間者攻撃に対して脆弱になります。
- 「CASユーザーの通常ログインを防止」設定は、CASユーザーがランダムに生成されたDrupalパスワードを知っていてもCAS認証をバイパスできないようにするために強く推奨されます。
- プロキシ機能は必要な場合にのみ有効にし、信頼できるプロキシサーバーのみを許可するようにプロキシチェーンを厳密に設定する必要があります。
- デバッグログは機密性の高い認証情報をDrupalのwatchdogに記録する可能性があるため、本番環境では有効にしないでください。
- CASユーザーのDrupalパスワードはランダムに生成された30文字の文字列です。理論的にはブルートフォース攻撃は可能ですが、通常ログインを防止することでこの攻撃ベクトルを完全に排除できます。