java - 使用通过 JAVA 代码生成的 token 时,oauth 的凭据无效(失败)

标签 java oauth

我正在尝试使用 oauth 访问我的收件箱,当我使用使用 JAVA 代码生成的 token 时,我总是收到无效凭据错误。我正在使用 IMAP 并传递 oauth token 来进行身份验证。但是,当我使用 python 生成 token 并在代码中使用相同的 token 时,它工作正常并从我的收件箱中获取电子邮件。

这是使用 IMAP 的代码片段:

public static IMAPSSLStore connectToImap(String host,
                                          int port,
                                          String userEmail,
                                          String oauthToken,
                                          String oauthTokenSecret,
                                          OAuthConsumer consumer,
                                          boolean debug) throws Exception {
   Properties props = new Properties();
   props.put("mail.imaps.sasl.enable", "true");
   props.put("mail.imaps.sasl.mechanisms", "XOAUTH");
   props.put(XoauthSaslClientFactory.OAUTH_TOKEN_PROP,
             oauthToken);
   props.put(XoauthSaslClientFactory.OAUTH_TOKEN_SECRET_PROP,
             oauthTokenSecret);
   props.put(XoauthSaslClientFactory.CONSUMER_KEY_PROP,
             consumer.consumerKey);
   props.put(XoauthSaslClientFactory.CONSUMER_SECRET_PROP,
             consumer.consumerSecret);
   Session session = Session.getInstance(props);
   session.setDebug(debug);

   final URLName unusedUrlName = null;
   IMAPSSLStore store = new IMAPSSLStore(session, unusedUrlName);
   final String emptyPassword = "anonymous";

   store.connect(host, port, userEmail, emptyPassword);
   return store;
 }

这是错误日志 -

DEBUG: setDebug: JavaMail version 1.3.3
1
2
DEBUG: mail.imap.fetchsize: 16384
DEBUG: enable SASL
DEBUG: SASL mechanisms allowed: XOAUTH
3
4
* OK Gimap ready for requests from 122.179.85.133 kn10if6680532igc.14
A0 CAPABILITY
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH
A0 OK Thats all she wrote! kn10if6680532igc.14
IMAP DEBUG: AUTH: XOAUTH
DEBUG: protocolConnect login, host=imap.googlemail.com, user=me@mydomain.com, password=<non-null>
IMAP SASL DEBUG: Mechanisms: XOAUTH
IMAP SASL DEBUG: SASL client XOAUTH
A1 AUTHENTICATE XOAUTH
+ 
IMAP SASL DEBUG: challenge:  :
IMAP SASL DEBUG: callback length: 1
IMAP SASL DEBUG: callback 0: javax.security.auth.callback.NameCallback@d1e832
IMAP SASL DEBUG: response: GET https://mail.google.com/mail/b/me@mydomain.com/imap/ oauth_signature_method="HMAC-SHA1",oauth_token="1%2Furn42qGc5mpD3BwVvJMzeVkHl_9iVRCZvaSOYmKNH5A",oauth_consumer_key="mydomain.com",oauth_timestamp="1329301212",oauth_nonce="629121335212995",oauth_version="1.0",oauth_signature="7O1YHXywiqOX8XzSAd%2BzbmDoBVw%3D" :
R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21haWwvYi9wZXRlckBhMm9tb2JpbGUuY29tL2ltYXAvIG9hdXRoX3NpZ25hdHVyZV9tZXRob2Q9IkhNQUMtU0hBMSIsb2F1dGhfdG9rZW49IjElMkZ1cm40MnFHYzVtcEQzQndWdkpNemVWa0hsXzlpVlJDWnZhU09ZbUtOSDVBIixvYXV0aF9jb25zdW1lcl9rZXk9ImEyb21vYmlsZS5jb20iLG9hdXRoX3RpbWVzdGFtcD0iMTMyOTMwMTIxMiIsb2F1dGhfbm9uY2U9IjYyOTEyMTMzNTIxMjk5NSIsb2F1dGhfdmVyc2lvbj0iMS4wIixvYXV0aF9zaWduYXR1cmU9IjdPMVlIWHl3aXFPWDhYelNBZCUyQnpibURvQlZ3JTNEIg==
5
DEBUG: connection available -- size: 1
A2 EXAMINE INBOX
A1 NO [ALERT] Invalid credentials (Failure)
A2 BAD Unknown command r5if6689112igo.50
A3 LOGOUT
* BYE Logout Requested r5if6689112igo.50
A3 OK Quoth the raven, nevermore... r5if6689112igo.50
Exception in thread "main" javax.mail.MessagingException: A2 BAD Unknown command r5if6689112igo.50;
  nested exception is:
    com.sun.mail.iap.BadCommandException: A2 BAD Unknown command r5if6689112igo.50
    at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:820)
    at com.a2o.service.collaboration.common.XoauthAuthenticator.getMessages(XoauthAuthenticator.java:238)
    at com.a2o.service.collaboration.common.XoauthAuthenticator.main(XoauthAuthenticator.java:205)

有没有办法从JAVA代码正确生成 token 。我的实际要求是使用我的 iPad 客户端生成 token 并在我的服务器中使用该 token 获取电子邮件。非常感谢任何帮助。

最佳答案

我们使用了http://pastebin.com/kwcZQcvj创建 token 和 secret 。

关于java - 使用通过 JAVA 代码生成的 token 时,oauth 的凭据无效(失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410472/

相关文章:

php - Google oAuth 登录提示,成功后重定向到下载 playstore 应用

javascript - 进行简单的 Twitter API 调用

java - 限制对象创建的策略或设计模式

Java Wav 文件错误(javax.sound.sampled.UnsupportedAudioFileException : could not get audio input stream from input file)

java - 无法通过java启动mysql

node.js - LTI 使用 Node.js 启动身份验证

twitter - 将 Twitter API 与应用程序结合使用 - 使用应用程序 OAUTH key 或用户登录

java - 如何在喷雾路由中将Java对象转换为Json

java - 数字和字符串组合的格式

PHP Azure OAuth JWT 应用程序角色