如何在 SimpleSAMLPhp IDP 上跟踪用户登录/注销时间?

问题描述 投票:0回答:1

我们希望在 SimpleSAMLPhp 的数据库中跟踪用户的登录/注销时间,我们在 SSO 登录过程中将其用作 IDP。 我被告知,一旦用户在 IDP 上进行身份验证,就在 MySql 数据库中插入新的日志记录,并在他注销后更新相同的条目,并且我必须在 simplesamlphp 文件中进行更改。

我发现 SimpleSAMLPhp 有 Statistics module,它可以从指定的日志文件中读取数据并显示统计信息。但我不想与日志文件交互。

读取日志文件或在 SimpleSAMLPhp 文件中添加代码更改以插入写入登录/注销事件的日志记录有什么更好的解决方案,有人可以给我建议吗?

php single-sign-on simplesamlphp
1个回答
0
投票
simplesamlphp 的 sqlauth 和 sqlauth passwordverify 模块允许使用多个查询作为 config/authsources.php 中设置的 mysqldbverify 参数。因此,您可以使用最后一个查询来更新用户的最后登录时间。它不返回任何行,因此不会更改身份验证流程中的任何内容。此外,它在每次用户登录时运行,并且仅在身份验证成功(即第一次查询成功)时运行。

示例:

'mysqldbverify' => [ 'sqlauth:PasswordVerify', 'dsn' => 'mysql:host=localhost;port=3306;dbname={mydbname}’, 'username' => ‘{mydbuser}’, 'password' => ‘{mydbpassword}’, 'passwordhashcolumn' => 'passwordhash', 'username_regex' => '/^[a-z0-9\@\-\.\_]+$/', // quick check to keep bad at bay 'query' => ['SELECT `users`.`login` AS uid, `users`.`password` AS passwordhash, `users`.`login` AS email FROM `users` WHERE `users`.`enabled` AND NOT `users`.`login_disabled` AND `users`.`login`= :username', 'SELECT `roles`.`role` as groupName FROM `users` INNER JOIN `user_roles` ON `user_roles`.`email` = `users`.`email` INNER JOIN `roles` ON `roles`.`role_id` = `user_roles`.`role_id` WHERE `users`.`enabled` AND NOT `users`.`login_disabled` AND `roles`.`enabled` AND `user_roles`.`enabled` AND `users`.`login`= :username UNION SELECT `roles`.`role` as groupName FROM `roles` where `roles`.`isdefault` = 1', 'UPDATE `users` SET `last_login` =\'' . date("Y-m-d H:i:s") . '\' WHERE `users`.`login`= :username', ], ],
更多信息:

https://simplesamlphp.org/docs/contrib_modules/sqlauth/sql.html

此方法不允许记录注销时间,因为这些查询不会在注销时运行。

© www.soinside.com 2019 - 2024. All rights reserved.