2016-09-29 82 views
0

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

的特殊情况在这里登录格式如下:

的SAML安装(IDP)是企业网络内部。如果用户(在该网络内/通过AD认证)访问该网络内的主机,用户名将被自动注入到其浏览器中,并且可通过$_SERVER['PHP_AUTH_USER']获得,并且我们保证用户已经被“验证” 。

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

现在我有点卡住了,因为对我的理解来说,写一个自己的authsource会延长默认的UserPassBase类有点“过量”。我将不得不处理空密码,并自动从登录表格等转发/张贴等。

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

SP重定向到IdP。 IdP的“登录页面”为PHP_AUTH_USER(没有输出,如登录表单),验证用户(没有进一步检查),并按照预期方式重定向,如果用户被正确检测到。如果无法找到PHP_AUTH_USER,用户将被重定向到某种错误页面。

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

回答

1

看看exampleAuth:Staticauthsource。它自动记录你在特定的用户

'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'); 
    } 
} 
+0

正是!谢谢! – Marco