Решает эту проблему. Я назначал другое значение «истечение», которое требуется в контенте. теперь он работает с
long currenttime = System.currentTimeMillis();
long now = currenttime/1000;
long expiration = currenttime/1000 + 3600;
и со следующими
String temp = JWTBase64Header + "." + JWTBase64Content;
byte[] JWTSignatureInput = temp.getBytes("UTF8");
final String keyFile = "xx9d9xxxxxx12cd99fxxxx60bxxxxx1-privatekey.p12";
final String keyPassword = "notasecret";
PrivateKey pkcsKey = loadKeyFromPkcs12(keyFile, keyPassword.toCharArray());
String JWTBase64Signature = signData(pkcsKey, new String(JWTSignatureInput, "UTF8"));
String params = "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion="+JWTBase64Header + "." + JWTBase64Content + "."
+ JWTBase64Signature;
URL url = new URL("https://accounts.google.com/o/oauth2/token");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(params.getBytes().length));
//Send request
DataOutputStream wr = new DataOutputStream (
conn.getOutputStream());
wr.writeBytes (params.toString());
wr.flush();
wr.close();
теперь просто получить InputStream от соединения и разобрать его, чтобы получить access_token.
Hiral Это пример, который я могу найти, поскольку я пытаюсь получить действительный токен в сценарии приложения Server to Server. Ваши методы: signData и loadKeyFromPkcs12, вы их написали или они существуют в библиотеке криптографии? – kstubs
Я написал эти 2 метода, его НЕ является частью библиотеки криптографии – Hiral