【发布时间】:2011-07-08 04:57:08
【问题描述】:
我正在尝试使用一个简单的 java 程序 (like this one) 连接到 gmail。但我的问题是:
出于安全原因,有没有办法使用加密密码而不是真实密码来做到这一点!类似于我们在 java-Oracle db 中的操作方式?
【问题讨论】:
标签: email gmail imap jakarta-mail
我正在尝试使用一个简单的 java 程序 (like this one) 连接到 gmail。但我的问题是:
出于安全原因,有没有办法使用加密密码而不是真实密码来做到这一点!类似于我们在 java-Oracle db 中的操作方式?
【问题讨论】:
标签: email gmail imap jakarta-mail
默认情况下,IMAP 的唯一身份验证机制是the LOGIN command,它采用未加密的用户名和密码。您可以通过 IMAP 连接或通过 STARTTLS 命令启动 TLS 层在其上添加加密层,但它仍然需要客户端知道明文密码。
服务器还可以选择提供可通过the AUTHENTICATE command 调用的 SASL 身份验证方法。服务器在其对CAPABILITY 命令的响应中通告它支持的 SASL 机制。例如,如果服务器包含“AUTH=PLAIN”能力,则客户端可以通过AUTHENTICATE PLAIN IMAP 命令使用PLAIN SASL 身份验证方法。
Gmail 仅支持一种 SASL 身份验证机制,XOAUTH:
C: 1 capability
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST CHILDREN XYZZY
SASL-IR AUTH=XOAUTH
S: 1 OK Thats all she wrote! dv32if2169247ibb.17
XOAUTH 是一种使用 OAuth 的非标准 SASL 身份验证机制。 (前面的“X”表示它没有标准化。)谷歌发布了a document defining the XOAUTH SASL mechanism。他们还提供了google-mail-xoauth-tools package,其中包括示例代码,展示了如何通过XOAUTH 将JavaMail 与Gmail 一起使用。
【讨论】: