Note that there are some explanatory texts on larger screens.

plurals
  1. POInvalid grant error is being thrown while retrieving accessToken for Google Service account request
    primarykey
    data
    text
    <pre><code>package com.google.serviceacc; import java.io.FileInputStream; import java.io.IOException; import java.security.InvalidKeyException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.Signature; import java.security.SignatureException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.PostMethod; import org.json.JSONException; import org.json.JSONObject; public class GoogleServiceAccount&lt;E&gt; { static String keyAlias = "privatekey"; public static byte[] signData(byte[] data, PrivateKey privateKey) throws InvalidKeyException, SignatureException, NoSuchAlgorithmException { Signature signature = Signature.getInstance("SHA256withRSA"); signature.initSign(privateKey); signature.update(data); return signature.sign(); } /*public static String encodeBase64(byte[] rawData) { byte[] data = Base64.encodeBase64(rawData); return data.toString(); }*/ private static PrivateKey getPrivateKey(String keyFile, String password) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException { KeyStore keystore = KeyStore.getInstance("PKCS12"); keystore.load(new FileInputStream(keyFile), password.toCharArray()); PrivateKey privateKey = (PrivateKey) keystore.getKey(keyAlias, password.toCharArray()); return privateKey; } public static void main(String[] args) throws InvalidKeyException, SignatureException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyStoreException, CertificateException, IOException { String keystoreLoc = "C:/Users/xyz/Downloads/b5b400df17628d8.p12"; String password = "notasecret"; String jwtStr=null; String jwtClaimStr=null; PrivateKey privateKey=null; JSONObject jwtHeader=new JSONObject(); try { jwtHeader.put("alg","RS256"); jwtHeader.put("typ","JWT"); jwtStr= jwtHeader.toString(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] encodedHeader = Base64.encodeBase64(jwtStr.getBytes("UTF-8")); System.out.println("Original HEaderString: " + jwtStr ); System.out.println("Base64 Encoded HeaderString : " + new String(encodedHeader)); JSONObject jwtClaimSet= new JSONObject(); try { jwtClaimSet.put("iss", "client_id_email@developer.gserviceaccount.com"); jwtClaimSet.put("scope", "https://www.googleapis.com/auth/devstorage.readonly"); jwtClaimSet.put("aud", "https://accounts.google.com/o/oauth2/token"); jwtClaimSet.put("exp", "1328554385"); jwtClaimSet.put("iat", "1328550785"); jwtClaimStr=jwtClaimSet.toString(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] encodedClaimSet=Base64.encodeBase64(jwtClaimStr.getBytes("UTF-8")); System.out.println("Original ClaimSet String:"+jwtClaimStr); System.out.println("Base64 Encoded ClaimSet:"+ new String(encodedClaimSet) ); StringBuffer token = new StringBuffer(); token.append(Base64.encodeBase64(jwtStr.getBytes("UTF-8"))); token.append("."); token.append(Base64.encodeBase64(jwtClaimStr.getBytes("UTF-8"))); privateKey= getPrivateKey(keystoreLoc, password); byte[] sig = signData(token.toString().getBytes("UTF-8"), privateKey); byte[] signedPayload =Base64.encodeBase64(sig); token.append("."); token.append(signedPayload); HttpClient client = new HttpClient(); PostMethod method = new PostMethod("https://accounts.google.com/o/oauth2/token"); method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded"); method.addParameter("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer"); System.out.println("printing Token.toString():"+token.toString()); method.addParameter("assertion",token.toString()); System.out.println("Printing QuerString:"+method.getQueryString()); System.out.println("Printing request char set:"+method.getRequestCharSet()); try { int responseCode=client.executeMethod(method); System.out.println(responseCode); System.out.println(method.getResponseBodyAsString()); System.out.println(method.getURI()); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } </code></pre> <p>If i try to execute the above code i' am getting { "error" : "invalid_grant" } I created a service account and was able to download private key through the above code.But when i try to exute the request to retrieve the accesstoken iam getting invalid grant error Do I need to add something?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload