デフォルトのユーザー認証を中央サーバー、つまりSSOサーバーの認証に置き換える必要があるという要件があります。
Drupalをデバッグすることで、すべてのセッション管理がincludes/session.inc
ファイルで行われることを知りました。画像に示すように認証を行いたい:
シナリオ:ログイン
手順の詳細は次のとおりです。
- ログインフォームを置き換えて、SSOサーバーにユーザー名とパスワードを送信します(Drupalではなく、.NET上)。
- そのサイトのデータベースを使用して、SSOサーバーでユーザーを認証します。私のウェブサイトのカスタムPHPページ(またはモジュールによるフォーム?)に応答を送り返します。
- 応答を使用して、usersテーブルでユーザーを識別し、パスワードを確認せずにそのユーザーのセッションを作成します(二重認証を意味するため)。デフォルトでは、Drupalは
$insecure_session_name
変数名と値を使用してCookieを設定します$sid
。DrupalがここでCookieを設定しないようにし、代わりにSSOサーバーに変数の値を送信します。 - SSOサーバーは、値を取るクッキーを作成し、メインドメインにドロップします
domain.com
(両方を思い出させるmy website
し、sso server
どのすぎではないのDrupalで、メインドメインのサブドメインにあります)。次に、drupalサイトはそのCookieを使用してログインできます。
私はそれが難しい質問であることを知っています、私はどのように始めるべきかについてのポインタを探していますか?彼らは「コアをハッキングするべきではない」と言っています。だから、私の質問は:
- Drupal認証とセッション管理がどのように機能するかを理解するには、どこを探すべきですか?
includes/session.inc
フックを使用して関数を呼び出すことができる方法はありますか?(関数のコメントには「内部使用のみ/変更しないでください」と書かれています)
注:同じ方法を使用してユーザーを登録するため、レコードはSSOサーバーの中央データベースに残ります。そしてその間に、Drupalサイトのデータベースにある同じユーザーのジャンクパスワードを入力します(ログイン中にパスワードがチェックされないため)。