title: Difference between v1, v2 and v3 in https://www.googleapis.com/oauth2/v3/certs
body: <p>I'm trying to authenticate a user on Android via <a href="https://developers.google.com/identity/sign-in/android/start" rel="noreferrer">Google Sign-in</a> to get the account name, grab the token via GoogleAuthUtil.getToken(getApplicationContext(), app, scopes), and then send the token to my NodeJS back-end server to verify</p>
  
  <p>I <a href="https://stackoverflow.com/questions/20159782/how-can-i-decode-a-google-oauth-2-0-jwt-openid-connect-in-a-node-app">found this</a> great stackoverflow question on how to decode it, cache the key id (KID) so it's not doing a round trip every time, etc. (haven't implemented this part yet, but sort of played around with it) My only question is: what's the difference between the following googleapis certs:</p>
  
  <ul>
  <li>www.googleapis.com/oauth2/v1/certs</li>
  <li>www.googleapis.com/oauth2/v2/certs</li>
  <li>www.googleapis.com/oauth2/v3/certs</li>
  </ul>
  
  <p>The KID on each version are identical, but the content is overtly different. Why? v2 and v3 seem to be almost identical except that v2 has an "==" appended at the end of the value of property 'n'</p>
  
  <p>Most importantly, which version do I use?</p>
  
  <p>I think these certs are called JSON Web Keys (JWK). I've also read the term 'x5c' What is that?</p>
  
  <p>PS: The token I'm getting on my nodejs from my android app is:</p>
  
  <pre><code>{
   "iss": "accounts.google.com",
   "sub": "SOME_LONG_NUMBER_THAT_I_DONT_KNOW_IF_SHOULD_SHOW",
   "azp": "SERVER_CLIENT_ID",
   "email": "ANDROID_USER_EMAIL",
   "email_verified": "true",
   "aud": "ANDROID_CLIENT_ID",
   "iat": "SOME_NUMBER",
   "exp": "SOME_NUMBER",
   "alg": "RS256",
   "kid": "e53139984bd36d2c230552441608cc0b5179487a"
  }
  </code></pre>