繁体   English   中英

Gmail api 出现错误 400“invalid_grant”

[英]Gmail api thows an error 400 "invalid_grant"

我使用 google oauth playground 生成了刷新令牌。 我使用此刷新令牌在下面的 java 代码中生成新的访问令牌。 4 天前它工作正常。但现在我看到以下错误,POST https://oauth2.googleapis.com/token { "error": "invalid_grant", "error_description": "Token has been expired or revoked. " 如果我从 oauth2 游乐场生成新的刷新令牌并替换我的 credentials.json 上的现有令牌,它工作正常。但如果我几天没有执行代码,同样的错误。我不确定我是什么失踪。 我的java代码

 private String getAccessToken() {
        try {
            credentials.put("grant_type", "refresh_token");
            credentials.put("client_id", credential.get("client_id"));
            credentials.put("client_secret", credential.get("client_secret"));
            credentials.put("refresh_token", credential.get("refresh_token"));
            credentials.put("project_id", credential.get("project_id"));
        
            StringBuilder postData = new StringBuilder();
            for (Map.Entry<String, Object> param : credentials.entrySet()) {
                if (postData.length() != 0) {
                    postData.append('&');
                }
                postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
                postData.append('=');
                postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
            }
            byte[] postDataBytes = postData.toString().getBytes("UTF-8");
            URL url = new URL("https://accounts.google.com/o/oauth2/token");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoOutput(true);
            con.setUseCaches(false);
            con.setRequestMethod("POST");
            con.getOutputStream().write(postDataBytes);
            BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            StringBuffer buffer = new StringBuffer();
            for (String line = reader.readLine(); line != null; line = reader.readLine()) {
                buffer.append(line);
            }
            JSONObject json = new JSONObject(buffer.toString());
            String accessToken = json.getString("access_token");
            return accessToken;
        } catch (Exception ex) {
            log.error("Error on generating access token:"+ExceptionUtils.getFullStackTrace(ex));
        }
        return null;
    }

如果 Java 应用程序长时间未连接到 Gmail 服务器,则 API 服务将被禁止。 您可以通过访问 Google 帐户设置并重新打开它来重新设置它。
您需要打开“开启”以允许不太安全的应用程序连接; 可以在这里找到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM