Google Gmail OAuth中返回的空密码

时间:2011-05-23 16:12:13

标签: oauth imap

我正在尝试使用带有OAuth的IMAP阅读内置Gmail。 使用基本主方法时,一切正常:

private static final String SCOPE = "https://mail.google.com/";

private static final String CONSUMER_KEY = "www.******.com";
private static final String CONSUMER_SECRET = "******";
private static final String USER_EMAIL = "******";

public static void main(String[] args) throws Exception {

    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
    oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);

    oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
    OAuthSigner signer = new OAuthHmacSha1Signer();

    GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);

    oauthParameters.setScope(SCOPE);

    oauthHelper.getUnauthorizedRequestToken(oauthParameters);

    String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);
    System.out.println(requestUrl);
    System.out.println("Please visit the URL above to authorize your OAuth "
            + "request token.  Once that is complete, press any key to "
            + "continue...");
    System.in.read();

    String token = oauthHelper.getAccessToken(oauthParameters);
    System.out.println("OAuth Access Token: " + token);
    System.out.println();

    //IMAP
    XoauthAuthenticator.initialize();

    IMAPSSLStore imapSslStore = XoauthAuthenticator.connectToImap("imap.googlemail.com",
            993,
            USER_EMAIL,
            oauthParameters.getOAuthToken(),
            oauthParameters.getOAuthTokenSecret(),
            new OAuthConsumer(null, CONSUMER_KEY, CONSUMER_SECRET, null),
            true);
    System.out.println("Successfully authenticated to IMAP.\n");
}

但是,当我走向3腿OAuth时,我回到空访问令牌秘密,这是控制器代码:

private static final String CALLBACK = "http://www.*******.com/oauthback.htm";

private static final String SCOPE = "https://mail.google.com/";
private static final String CONSUMER_KEY = "www.******.com";
private static final String CONSUMER_SECRET = "******";
private static final String USER_EMAIL = "******";

@RequestMapping("/oauth.htm")
public void oauth(HttpServletResponse response, HttpSession session) throws OAuthException, IOException,
        Base64DecoderException, InvalidKeySpecException, NoSuchAlgorithmException {
    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
    oauthParameters.setOAuthCallback(CALLBACK);
    oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
    oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
    oauthParameters.setScope(SCOPE);

    OAuthSigner signer = new OAuthHmacSha1Signer();
    GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);

    oauthHelper.getUnauthorizedRequestToken(oauthParameters);

    String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);
    System.out.println(requestUrl);

    String accessTokenSecret = oauthParameters.getOAuthTokenSecret();
    System.out.println("OAuth Access Token's Secret: " + accessTokenSecret);
    session.setAttribute("accessTokenSecret", accessTokenSecret);

    response.sendRedirect(requestUrl);
}

@RequestMapping("/oauthback.htm")
public String oauthback(HttpServletRequest request, HttpSession session, Model model) throws Exception {
    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
    oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
    oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);

    GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthHmacSha1Signer());
    oauthHelper.getOAuthParametersFromCallback(request.getQueryString(), oauthParameters);

    String accessToken = oauthParameters.getOAuthToken();
    System.out.println("OAuth Access Token: " + accessToken);

    String accessTokenSecret = oauthParameters.getOAuthTokenSecret();
    System.out.println("OAuth Access Token's Secret: " + accessTokenSecret);

    //IMAP
    XoauthAuthenticator.initialize();

    IMAPSSLStore imapSslStore = XoauthAuthenticator.connectToImap("imap.googlemail.com",
            993,
            USER_EMAIL,
            accessToken,
            accessTokenSecret,
            new OAuthConsumer(CALLBACK, CONSUMER_KEY, CONSUMER_SECRET, null),
            true);
    System.out.println("Successfully authenticated to IMAP.\n");
    model.addAttribute("msg", "accessToken: " + accessToken + " accessTokenSecret: " + accessTokenSecret);

    return "errorView";
}

我做错了什么?我敢打赌,这很简单 - 但我只是试了太长时间:)

1 个答案:

答案 0 :(得分:2)

解决了......万一有人需要它:

@RequestMapping("/oauth.htm")
public void oauth(HttpServletResponse response, HttpSession session) throws OAuthException, IOException,
        Base64DecoderException, InvalidKeySpecException, NoSuchAlgorithmException {
    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
    oauthParameters.setOAuthCallback(CALLBACK);
    oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
    oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
    oauthParameters.setScope(SCOPE);

    oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH);


    OAuthSigner signer = new OAuthHmacSha1Signer();
    GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);

    oauthHelper.getUnauthorizedRequestToken(oauthParameters);

    String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);
    System.out.println(requestUrl);

    String accessTokenSecret = oauthParameters.getOAuthTokenSecret();
    System.out.println("OAuth Access Token's Secret: " + accessTokenSecret);
    session.setAttribute("accessTokenSecret", accessTokenSecret);

    response.sendRedirect(requestUrl);
}

@RequestMapping("/oauthback.htm")
public String oauthback(HttpServletRequest request, HttpSession session, Model model) throws Exception {
    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
    oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
    oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);

    System.out.println("Query String: " + request.getQueryString());

    GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthHmacSha1Signer());
    oauthHelper.getOAuthParametersFromCallback(request.getQueryString(), oauthParameters);

    oauthParameters.setOAuthTokenSecret((String) session.getAttribute("accessTokenSecret"));

    String token = oauthHelper.getAccessToken(oauthParameters);
    System.out.println("OAuth Token: " + token);

    String accessToken = oauthParameters.getOAuthToken();
    System.out.println("OAuth Access Token: " + accessToken);

    String accessTokenSecret = oauthParameters.getOAuthTokenSecret();
    System.out.println("OAuth Access Token's Secret: " + accessTokenSecret);

    //IMAP
    XoauthAuthenticator.initialize();

    IMAPSSLStore imapSslStore = XoauthAuthenticator.connectToImap("imap.googlemail.com",
            993,
            USER_EMAIL,
            accessToken,
            accessTokenSecret,
            new OAuthConsumer(CALLBACK, CONSUMER_KEY, CONSUMER_SECRET, null),
            true);
    System.out.println("Successfully authenticated to IMAP.\n");
    model.addAttribute("msg", "accessToken: " + accessToken + " accessTokenSecret: " + accessTokenSecret);

    return "errorView";
}