没有密码的 SimpleSAMLphp 自定义 authsource

SimpleSAMLphp custom authsource without password

我需要为我们的一位客户编写自定义 authsource 模块。我已经使用各种身份验证源(如 LDAP、SQLauth 等)将 SimpleSAMLphp 设置为 Idp。所有这些身份验证源的共同点是它们使用登录表单并根据 sspmod_core_Auth_UserPassBase class 进行身份验证。这意味着将有一个用于用户名和密码等的登录表单。

这里的特例如下:

SAML 安装 (IdP) 在公司网络内。如果用户(通过 AD 在 network/authenticated 内)访问该网络内的主机,用户名将自动注入其浏览器并可通过 $_SERVER['PHP_AUTH_USER'] 使用,我们可以保证,用户已准备就绪 "validated".

这意味着我们不必再 "authenticate" 用户了。我们不必显示登录表单,只需将该用户标记为已通过身份验证即可。

现在我有点卡住了,因为根据我的理解,编写一个自己的扩展默认 UserPassBase class 的 authsource 有点 "overdosed"。我将不得不处理空密码并自动从登录表单等forward/post

我想有更好的方法来处理这个问题。流程将非常简单:

SP 重定向到 IdP。 IdP "login page" 读取 PHP_AUTH_USER(没有像登录表单那样的输出),验证用户(无需任何进一步检查)并在正确检测到用户时按预期重定向。如果无法以任何方式找到 PHP_AUTH_USER,用户将被重定向到某种错误页面。

有什么想法可以正确解决吗?我想我将不得不编写自己的全新 authsource class 来扩展基础 SimpleSAML_Auth_Source class?在我重新发明轮子之前,也许有人有这种情况的例子!?

看看 exampleAuth:Static authsource。它会自动将您登录为特定用户

'example-static' => array(
    'exampleauth:Static',
    'uid' => array('testuser'),
    'eduPersonAffiliation' => array('member', 'employee'),
    'cn' => array('Test User'),
),

您可以像这样创建自己的模块,但不是从 authsource 配置加载属性,而是根据用户名加载它们。并做类似

的事情
public function authenticate(&$state) {
    $user = $_SERVER['PHP_AUTH_USER'];
    if ($user) {
        $attributes = loadAttributesForUser($user);
        $state['Attributes'] = $attributes;
    } else {
        throw new Exception('No user found');
    }
}