SimpleSAMLphp自定义authsource,无密码

时间:2016-09-29 13:20:12

标签: php authentication browser simplesamlphp

对于我们的一位客户,我需要编写一个自定义authsource模块。我已经使用LDAP,SQLauth等各种authsource将SimpleSAMLphp设置为Idp。所有这些authsources都有共同点,他们使用登录表单并对sspmod_core_Auth_UserPassBase类进行身份验证。这意味着将有一个用户名和密码等的登录表单。

这里的特例如下:

SAML安装(IdP)位于公司网络内部。如果用户(在该网络内部/通过AD进行身份验证)访问该网络内的主机,则用户名将自动注入其浏览器并可通过$_SERVER['PHP_AUTH_USER']获得,我们保证用户是已经过验证"。

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

现在我有点陷入困境,因为根据我的理解,这将是一点点"过量"编写一个扩展默认UserPassBase类的自己的authsource。我必须处理空密码并自动转发/发布登录表单等。

我想有更好的方法可以解决这个问题。流程非常简单:

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

任何想法如何解决正确的方法?我想我将不得不编写自己的全新authsource类来扩展基类SimpleSAML_Auth_Source类?在我重新发明轮子之前,也许某人有这样的例子!

1 个答案:

答案 0 :(得分:1)

查看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');
    }
}