我有一个要求,我必须用中央服务器(即SSO服务器)的身份验证替换默认的用户身份验证。
通过调试Drupal,我知道所有会话管理都在includes/session.inc
文件中进行。我要进行验证,如图所示:
场景:登录
步骤的详细信息将是:
- 替换登录表单,以将用户名和密码提交到SSO服务器(不是在Drupal上,而是在.NET上)。
- 使用该站点的数据库在SSO服务器上对用户进行身份验证;并将响应发送回我的网站的某个自定义PHP页面(或模块形式的表单?)。
- 使用响应,在用户表中标识用户,然后为该用户创建会话,而无需检查密码(因为这将意味着双重身份验证)。默认情况下,Drupal设置cookie的名称为
$insecure_session_name
variable,值为value$sid
。我希望Drupal不要在此处设置cookie,而是将变量的值发送到SSO服务器。 - SSO服务器将获取值,创建一个cookie,然后将其放置在主域中
domain.com
(以提醒两者,my website
并且sso server
它们都位于主域的子域中,而在Drupal中也是如此)。然后,Drupal站点可以使用该cookie登录。
我知道这是一个很难回答的问题,我只是在寻找应该如何开始的指针?正如他们所说的“您不应该破解核心”。因此,我的问题是:
- 我应该在哪里寻找深度了解Drupal身份验证和会话管理的方式?
- 有没有一种方法可以
includes/session.inc
使用钩子来调用函数(如函数注释中所说的“仅供内部使用/不得修改”)?
注意:我将使用相同的方法注册用户,以便将记录保留在SSO服务器的中央数据库中。在此期间,将在Drupal站点的数据库中为同一用户输入一些垃圾密码(因为登录时不会检查该密码)。