Sto tentando di integrare Google Calendar nella mia applicazione e sto riscontrando alcuni problemi con l'autorizzazione OAuth che trasmette un RefreshToken. Ricevo un AccessToken senza problemi, ma la proprietà RefreshToken è null. Vedere la linea marcata "ERROR qui:" per cui sto avendo il problemaPerché non ricevo un RefreshToken da una richiesta Google OAuth?
regolatoremio Asp.Net MVC (chiamato OAuthController
) è simile al seguente:
public ActionResult Index()
{
var client = CreateClient();
client.RequestUserAuthorization(new[] { "https://www.googleapis.com/auth/calendar" }, new Uri("http://localhost/FL.Evaluation.Web/OAuth/CallBack"));
return View();
}
public ActionResult CallBack()
{
if (string.IsNullOrEmpty(Request.QueryString["code"])) return null;
var client = CreateClient();
// Now getting a 400 Bad Request here
var state = client.ProcessUserAuthorization();
// ERROR HERE: The RefreshToken is NULL
HttpContext.Session["REFRESH_TOKEN"] = Convert.ToBase64String(Encoding.Unicode.GetBytes(state.RefreshToken));
return JavaScript("Completed!");
}
private static WebServerClient CreateClient()
{
return
new WebServerClient(
new AuthorizationServerDescription()
{
TokenEndpoint = new Uri("https://accounts.google.com/o/oauth2/token"),
AuthorizationEndpoint = new Uri("https://accounts.google.com/o/oauth2/auth"),
ProtocolVersion = ProtocolVersion.V20
}
, _GoogleClientId, _GoogleSecret);
}
vedo nei documenti API di Google, che Devo assicurarmi che lo access_type
richiesto sia impostato su offline
per l'invio di un RefreshToken. Come posso impostare questo valore nella mia richiesta Authenticator?
Ho ridotto il mio codice e ora ricevo un errore di 400 richieste errate durante il tentativo di interrogare Google. –
Ho risolto il mio problema codificando manualmente HttpRequests avanti e indietro su Google. Io disinfetterò e inserirò il codice come risposta –