Android Javamail自定义身份验证

时间:2012-10-19 16:23:53

标签: java android oauth-2.0 javamail

所以,我意识到SASL没有在android中实现,因此javamail oauth2方法不会开箱即用。

然而,根据google api docs for gmail imap(https://developers.google.com/google-apps/gmail/xoauth2_protocol),获取一个身份验证令牌,对其进行编码并手动将'AUTHENTICATE XOAUTH2'发送到服务器似乎相当简单。

我的问题:我想使用javamail IMAP功能(不想处理IMAP协议命令和自我响应),但我需要一种方法来简单地插入正确的身份验证命令 - 而不是传统的登录用户名密码。

可以这样做,最简单的方法是什么?我可以创建自己的身份验证方法并轻松实现吗?

或者,我可以创建连接,然后将其移交给IMAPStore(怀疑这会在创建和管理连接池时起作用)。

--- ---编辑

更具体地说,在Imap.protocol.IMAPSaslAuthenticator所依赖的Android中没有实现javax.security.sasl方法。

3 个答案:

答案 0 :(得分:4)

我有一个工作jar,支持imap的sasl(对于smtp,你必须按照你的说法发出命令,因为android的java邮件没有smtp的sasl基础结构)。 我所做的只是将包javax.security.sasl和javax.security.auth.callback添加到android源码的java邮件中并重新打包它。我不得不把它放在一个不同的namaspace,myjavax.security.sasl等,因为否则android构建系统会抱怨该软件包包含核心库,不知道为什么它不会抱怨javax.mail无论如何都在核心命名空间中(使用javax)。我还必须在某些类中更改新命名空间的一些导入,但基本上是包类本身和com.sun.mail.imap.protocol.IMAPSaslAuthenticator。 有了这个,我可以使用我从Android AccountManager获得的oauth 2令牌成功验证gmail imap服务器,我没有尝试其他任何东西。对于smtp,你可以在这里查看我的答案Javamail api in android using XOauth 我认为有可能让Sasl从这里获得新的类http://kenai.com/projects/javamail/sources/mercurial/show/mail/src/main/java/com/sun/mail/smtp,这些类具有Sasl对smtp的支持。 我认为这非常好,因为我所做的只是添加一些GPL类,我添加的是来自JDK的。 希望这有帮助,如果您需要罐子或更多解释如何做,请问。

答案 1 :(得分:1)

如果不破解JavaMail类,就无法做到这一点。

您不能只使用用户名/密码验证吗?

答案 2 :(得分:0)

来自https://java.net/projects/javamail/pages/OAuth2

  

从JavaMail 1.5.5开始,对OAuth2身份验证的支持是内置的,不再需要SASL