如何使用 Perl 进行身份验证和会话管理?

How to do authentication and session management using Perl?

我正在尝试创建命令行界面,我需要在其中使用 perl 在用户(客户端)和身份验证服务器之间执行身份验证和会话管理(在 Perl 中使用 Plack 的 Starman ).

执行安全身份验证以及身份验证成功后进行会话管理的基本步骤是什么?

我尝试了以下步骤 -

1- 用户在客户端输入用户名和密码
2- 客户端将对凭据进行编码并将其发送到身份验证服务器
3- 身份验证服务器将验证来自 auth-database 的用户凭据并生成带有用户名及其登录类型的会话密钥(Token)
4- 身份验证成功后,此会话密钥(令牌)将被发送回客户端(用户),否则将发送 undef,客户端将抛出 'invalid user error'
5-此令牌将与来自客户端的每个命令一起发送,具有命令定义的服务器(不是自动服务器)将验证令牌并允许基于验证的命令执行
6- 现在服务器有用户的登录时间和过期时间(比如 2 小时),所以 auth 服务器将继续检查用户是否已超过过期时间,如果是,则将用户带到登录提示。

欢迎您对以上实现提出反馈和建议。

听起来不错。如果客户端可以与服务器建立持久的双向连接,则不必一直发送会话令牌,仅在建立连接时才发送。

此外,无论何时使用令牌,都应向后推过期时间。

如果服务器和客户端之间的连接是未加密的,服务器应该在开始时(在步骤1之后)发送一个随机数,并且客户端也生成一个随机数。客户端创建(密码、服务器随机数、客户端随机数)的哈希值,并将该哈希值与客户端随机数一起发送到服务器。

这样即使有被动攻击者,密码也会受到保护。 为了防止主动攻击者 (MiTM),您需要更复杂的东西,例如 Diffie-Hellman key exchange.