我正在尝试通过Google contacts API验证我的应用程序。我已经完成了Oauth2流程的第一步,并获得了一个授权代码。我正试图将此代码交换为访问令牌和刷新令牌,但当我试图从googleapis.com/oauth2/v4/token receive
响应:“invalid_grant”“错误请求”错误400。
try
{
Map<String,Object> params = new LinkedHashMap<>();
params.put("grant_type","authorization_code");
params.put("code", authCode);
params.put("client_id",CLIENTE_ID);
params.put("client_secret",CLIENTE_ID_SECRETO);
params.put("redirect_uri","http://localhost:8080/conob/api2/contatos/insert");
StringBuilder postData = new StringBuilder();
for(Map.Entry<String,Object> param : params.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://www.googleapis.com/oauth2/v4/token");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setRequestProperty("charset", "utf-8");
con.setRequestProperty("Content-Length", postData.toString().length() + "");
con.getOutputStream().write(postDataBytes);
BufferedReader reader = null;
try {
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 e) {
reader = new BufferedReader(new InputStreamReader(con.getErrorStream()));
StringBuffer buffer = new StringBuffer();
for (String line = reader.readLine(); line != null; line = reader.readLine()){
buffer.append(line);
}
System.out.println(buffer.toString());
System.out.println(e.toString());
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return null;
我在很多论坛上搜索了很多小时,但没有得出一个解决我的问题的方法。
基本上,我的应用程序需要插入新的联系人的谷歌帐户在公司内部网。
我的问题是什么是响应“invalid_grant”?
在OAuth2规范中,“invalid_grant”
是与无效/过期/撤销令牌(身份验证授予或刷新令牌)相关的所有错误响应的总括。
endpoint
redirect_uri_mismatch
注意,您可能需要考虑使用google people api,它比旧的google contacts api更容易使用。
我在StackOverflow上看到过几个关于这个的问题,但没有一个对我有帮助。我不能过去的'invalid_grant'错误时,试图做授权代码授予我的1管理员用户在DocuSignSandbox环境。 我有一个用户,他是仪表板中的DS管理员。我创建了一个新的应用程序,并获得了集成商密钥/客户端id和密钥 使用指南,https://developers.docusign.com/esign-res
我想更好地理解隐式授权流和授权代码授权流之间的区别,因为我不确定我目前的理解是否正确。 隐式授权流主要由前端应用程序用于验证用户身份吗? 隐式授权流是否只需要一个client_id、用户名和密码来进行身份验证,换句话说,永远不会发送client_secret? 授权码只是一个短期令牌吗? 将授权码交换为访问令牌后,客户端可以访问用户帐户多长时间?具体地说,如果客户端是一个长时间运行的脚本,那么用户
我试图复制cognito hosted ui sign in页面(https://docs.aws.amazon.com/cognito/latest/developerguide/login-endpoint.html)的功能,但是aws sdk没有提供任何获取用户名、密码并返回授权代码的方法,这些代码可用于获取Access/ID令牌。initiateAuth和adminInitiateAuth
我正在创建一个小的YouTube Analytics API脚本,我一直在尝试用用户授权码交换访问令牌。 我已经设法获得了授权令牌,但是我不知道如何“向Google提交POST请求”。 我认为这是可行的: 但我不知道在条件之间放什么才能真正交换代码。当我访问该位置时 https://accounts.google.com/o/oauth2/code={代码} 我得到一个未知的URL。
接口说明 获取授权代码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /wish3dearth/api/access/v1.0.0/getHardWareCode 是否需要登录 否 请求字段说明 无 响应字段说明 无 响应成功示例 { "code": 0, "data": "134305892", "message":
接口说明 获取授权代码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /wish3dearth/api/access/v1.0.0/get