1

我有一个已经构建并运行的身份验证层的应用程序。我希望在此应用程序中添加一个小型 imap 客户端,但不确定如何处理 imap 身份验证。我一直构建身份验证系统来对密码进行加盐/哈希处理,然后立即销毁纯文本密码的任何痕迹......所以,我从来没有处理过我需要维护的密码的经验。

我希望用户能够从应用程序内(或在初始登录时)登录 imap,并在他们使用应用程序的其他功能时保持该登录。

任何提示都会很棒......谢谢。

4

2 回答 2

4

有关信息,我检查了圆形立方体代码,然后......

Roundcube 只需加密密码并将其存储在会话中:

$_SESSION['user_id']      = $user->ID;
$_SESSION['username']     = $user->data['username'];
$_SESSION['storage_host'] = $host;
$_SESSION['storage_port'] = $port;
$_SESSION['storage_ssl']  = $ssl;
$_SESSION['password']     = $this->encrypt($pass);
$_SESSION['login_time']   = time();

$this->encrypt($pass)指的是rcube::encrypt使用 MCrypt 应用 3DES 加密

然后在需要时rcube::decrypt使用对称方法:

$host = $_SESSION['storage_host'];
$user = $_SESSION['username'];
$port = $_SESSION['storage_port'];
$ssl  = $_SESSION['storage_ssl'];
$pass = $this->decrypt($_SESSION['password']);

顺便说一句,加密方法似乎使用了一种秘密盐(这里称为“crypto_key”)。

于 2013-09-01T00:30:46.227 回答
1

不幸的是,IMAP 协议要求您知道密码(共享密钥)才能对其进行身份验证。当您登录到 IMAP 时,您要么直接使用它,要么使用 CRAM-MD5 之类的东西。

但是,根据服务器的不同,您通常可以通过至少每 30 分钟发出一次 NOOP 来无限期地维护 IMAP 连接。但是,任何网络问题都需要您重新登录。

于 2012-08-17T19:25:18.787 回答