OpenIDConnect de Google devuelve un token Base64 que no se puede analizar

Como ejercicio para comprender OpenIDConnect, estoy tratando deautenticarme en mi aplicación web con Google siguiendo esta guía.

El problema es que no puedo leer el token que Google envía a mi aplicación>

var bytes = Convert.FromBase64String(codeEx.Id_token);
var token = Encoding.ASCII.GetString(bytes);

Falla en la primera línea que dice: "La entrada no es una cadena de base 64 válida, ya que contiene un carácter no base 64, más de dos caracteres de relleno o un carácter ilegal entre los caracteres de relleno".

El documento establece: "Un token de ID es un objeto JSON firmado criptográficamente codificado en la base 64".

Por razones obvias no puedo poner el token aquí. Yo he tratado:

La entrada no es una cadena de base 64 válida, ya que contiene un carácter no base 64Agregue '=' hasta que la longitud sea múltiplo de 4.Todos juntos.

Recibo la respuesta de intercambio de código y la deserializo con la biblioteca NewtonSoft.Json:

  var http = new HttpClient(handler);
  HttpResponseMessage result = await http.PostAsync("https://www.googleapis.com/oauth2/v3/token", postData);
  var json = JObject.Parse(await result.Content.ReadAsStringAsync());

  if (json.Property("error") != null)
      throw new Exception(json.Property("error").Value.ToString() + ":" + json.Property("error_description").Value.ToString());

  var codeEx = json.ToObject<CodeExchangeResponse>();

No sé si hay algún problema potencial con la codificación. Puedo ver varios ´-´ y ´_´ en el token.

¿Alguna idea sobre cómo leer el token?

Respuestas a la pregunta(2)

Su respuesta a la pregunta