不带密码的SimpleSAMLphp自定义authsource

不带密码的SimpleSAMLphp自定义authsource,php,authentication,browser,simplesamlphp,Php,Authentication,Browser,Simplesamlphp,对于我们的一个客户,我需要编写一个自定义authsource模块。我已经准备好使用各种身份验证源(如LDAP、SQLauth等)将SimpleSAMLphp设置为Idp。所有这些身份验证源都有一个共同点,即它们使用登录表单并根据sspmod\u core\u Auth\u UserPassBase类进行身份验证。这意味着将有一个用户名和密码等登录表单 这里的特殊情况如下: SAML安装(IdP)位于公司网络内部。如果用户(在该网络内/通过AD验证)访问该网络内的主机,用户名将自动插入其浏览器中,

对于我们的一个客户,我需要编写一个自定义authsource模块。我已经准备好使用各种身份验证源(如LDAP、SQLauth等)将SimpleSAMLphp设置为Idp。所有这些身份验证源都有一个共同点,即它们使用登录表单并根据
sspmod\u core\u Auth\u UserPassBase
类进行身份验证。这意味着将有一个用户名和密码等登录表单

这里的特殊情况如下:

SAML安装(IdP)位于公司网络内部。如果用户(在该网络内/通过AD验证)访问该网络内的主机,用户名将自动插入其浏览器中,并可通过
$\u服务器['PHP\u AUTH\u user']
访问,我们保证该用户已准备好“验证”

这意味着我们不再需要“验证”用户。我们不必显示登录表单,只需将该用户标记为已验证

现在我有点卡住了,因为据我所知,编写自己的authsource扩展默认的
UserPassBase
类有点“过度”。我将不得不处理空密码和自动转发/张贴从登录表单等

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

SP重定向到IdP。IdP“登录页面”读取
PHP\u AUTH\u USER
(没有像登录表单那样的输出),对用户进行身份验证(无需进一步检查),并在正确检测到用户时按预期重定向。如果以任何方式都找不到
PHP\u AUTH\u用户
,用户将被重定向到某种错误页面


有没有办法用正确的方法解决这个问题?我想我必须编写我自己的全新authsource类来扩展基本的
SimpleSAML\u Auth\u Source
类?在我重新发明轮子之前,也许有人有这样的例子

看看
示例auth:Static
。它会自动将您作为特定用户登录

'example-static' => array(
    'exampleauth:Static',
    'uid' => array('testuser'),
    'eduPersonAffiliation' => array('member', 'employee'),
    'cn' => array('Test User'),
),
您可以像它一样创建自己的模块,但不是从
authsource
config加载属性,而是基于用户名加载属性。然后做一些类似的事情

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

看看
示例auth:Static
。它会自动将您作为特定用户登录

'example-static' => array(
    'exampleauth:Static',
    'uid' => array('testuser'),
    'eduPersonAffiliation' => array('member', 'employee'),
    'cn' => array('Test User'),
),
您可以像它一样创建自己的模块,但不是从
authsource
config加载属性,而是基于用户名加载属性。然后做一些类似的事情

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

确切地非常感谢。确切地非常感谢。