没有密码的 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');
}
}
我需要为我们的一位客户编写自定义 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');
}
}