Пустой секрет возвращается в Google Gmail OAuth - PullRequest
1 голос
/ 23 мая 2011

Я пытаюсь читать почту Gmail, используя IMAP с OAuth.При использовании основного метода main все работает нормально:

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");
}

, но когда я перехожу к OAuth с 3-мя участками, я получаю секретный токен пустого доступа, это код контроллера:

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 Ответ

2 голосов
/ 24 мая 2011

Решено ... на случай, если кому-то это нужно:

@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";
}
...