【问题标题】:Android Javamail custom AuthenticationAndroid Javamail 自定义身份验证
【发布时间】:2016-04-25 21:07:54
【问题描述】:

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

但是,根据 gmail imap (https://developers.google.com/google-apps/gmail/xoauth2_protocol) 的 google api 文档,获取身份验证令牌、对其进行编码并手动将“AUTHENTICATE XOAUTH2”发送到服务器似乎相当简单。

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

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

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

---编辑---

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

【问题讨论】:

    标签: java android oauth-2.0 jakarta-mail


    【解决方案1】:

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

    【讨论】:

    • 感谢上面的回复和讨论 - 我最终只是在我的应用程序中询问用户名/密码,尽管我仍然更喜欢 oauth 2 和 sasl(我没有对 SMTP 做任何事情)。你有你使用的罐子或来源的链接吗?
    • 这是一个包含源代码和 jar 的 zip。它只是 javamail 的邮件部分,您需要从 javamail for android 激活和附加 jar。 dl.dropbox.com/u/3092259/javamail.zip如果需要,可以使用 jardesc 导出一个新的 jar。
    • @alex 您附加的代码是 java 项目。您是否为 android 创建了任何示例,请分享。提前致谢
    • 对于 smtp 发件人 - SMTPTransport 工作正常,检查邮件 w IMAP 不工作 w OAuth2
    【解决方案2】:

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

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

    【讨论】:

    • 好吧,这就是我害怕的。我可以使用用户名/密码,但如果可能的话宁愿使用令牌,这样用户就不必在我的应用程序中输入他们的凭据,只需在我第一次请求令牌时“批准”它......
    • Mhhh 我注意到检查源代码,我的答案中的解决方案可能是 Oracle 许可问题,每个许可证中的类路径异常。基本上据我了解,命名空间应保持 javax.* 。如果是这样,是否有可能让android停止抱怨核心类?毕竟,它不会抱怨 java 邮件中的 javax.mail 用于 android“端口”。我认为 Bill Shannon 应该能够回答这个问题:p,只是注意到你的名字在这里和我正在查看的来源:D
    • 我不知道 Android 抱怨哪些类以及为什么。太糟糕了,它不是真正的 Java,对吧? ;-) 我不记得类路径异常中有关于 javax.* 的任何内容,但是 IANAL。
    • Android 没有 javax.security.sasl 中的所有内容和 javax.security.auth.callback 中的一些类。所有这些类都没有其他依赖项,因此添加它们是安全的,它们甚至都是和谐地实现的,所以我不明白为什么它们一开始就没有包含它们。对于 java 邮件,通常还有一些其他依赖项,但它们已经在 java mail for android 包中。我对许可证感到困惑,它不是类路径异常,而是 LICENSE.txt 中的第 3 点,java 限制,但也许我的解释是错误的。如果是这样,我下面的解决方案就可以了。
    • 来自 javamail 开发人员的有趣回答。所以,没有办法让它与 OAuth2.0 一起工作,是吗?如今,使用用户名/密码也不是一种选择,因为 gmail 会因不安全警告而使您丧命。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2010-12-17
      • 1970-01-01
      • 2016-07-09
      • 2016-08-04
      相关资源
      最近更新 更多