Sto tentando di utilizzare lo Google Calendar API nell'applicazione Web .NET non MVC . (Questo sembra essere una distinzione importante.)Come imposto return_uri per GoogleWebAuthorizationBroker.AuthorizeAsync?
ho ’ ho cercato di usare il codice da this example a Google e al this example Daimto insieme ad alcuni suggerimenti utili da un certo numero di related posts here.
ho scritto il seguente metodo:
public void GetUserCredential(String userName)
{
String clientId = ConfigurationManager.AppSettings[ "Google.ClientId" ]; //From Google Developer console https://console.developers.google.com
String clientSecret = ConfigurationManager.AppSettings[ "Google.ClientSecret" ]; //From Google Developer console https://console.developers.google.com
String[] scopes = new string[] {
Google.Apis.Calendar.v3.CalendarService.Scope.Calendar
};
// here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets
{
ClientId = clientId,
ClientSecret = clientSecret
}, scopes, userName, CancellationToken.None, new FileDataStore("c:\\temp")).Result;
// TODO: Replace FileDataStore with DatabaseDataStore
}
Il problema è che, quando Google ’ s pagina OAuth2 si chiama, redirect_uri
mantiene sempre impostato http://localhost:<some-random-port>/authorize
. Non ho idea di come impostare questo a qualcosa d'altro, come nel seguente esempio URL generato da AuthorizeAsync
:
https://accounts.google.com/o/oauth2/auth?access_type=offline
&response_type=code
&client_id=********.apps.googleusercontent.com
&redirect_uri=http:%2F%2Flocalhost:40839%2Fauthorize%2F
&scope=https:%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar
Google risponde con un redirect_uri_mismatch pagina di errore con il messaggio:
“ Il reindirizzare URI nella richiesta: http://localhost:XXXXX/authorize/ non corrisponde con un redirect registrato URI ”
posso registrare solo tante redirect URI ’ s nel mio Google Developer ’ s Console Cr pagina degli editori. I ’ m non è incline a registrare le porte 65535 e desidero utilizzare una pagina diversa da /authorize
sul mio sito. Nello specifico, desidero utilizzare, durante lo sviluppo, http://localhost:888/Pages/GoogleApiRedirect
ma non ho idea di dove impostare questo, al di là di ciò che ho fatto nella console dello sviluppatore ’.
Come impostare in modo esplicito il valore di redirect_uri
? Sono anche aperto a una risposta nel modulo “ Questo approccio è completamente sbagliato. ”
EDIT:
Dopo aver giocato con questo negli ultimi giorni, ho scoperto che utilizzando il Segreto ID Client/Client per l'applicazione nativa, piuttosto che l'applicazione Web, posso almeno avere alla pagina di autorizzazione web di Google senza lamentarsi di uno redirect_uri_mismatch. Questo è ancora inaccettabile, perché ritorna ancora a http://localhost:<some-random-port>/authorize
, che è al di fuori del controllo della mia applicazione web.
Hai provato la configurazione di Visual Studio per utilizzare una porta predefinita per il vostro progetto web app? controlla questa documentazione, così puoi definire una porta e usarla nella tua console per sviluppatori. https://msdn.microsoft.com/en-us/library/ms178109(v=vs.140).aspx – Gerardo
Grazie per il suggerimento, @ Gerardo. Sì, è già preconfigurato per la porta 888. Ho provato anche porte "non privilegiate" superiori a 1024. Ho visto questo suggerimento in alcune situazioni simili alla mia. Se funzionasse, suppongo che potrei vivere con '/ authorize' come la mia pagina di reindirizzamento. Non una soluzione ideale, ma una con cui potrei vivere. –
Puoi anche provare a distribuire il progetto direttamente in IIS, da lì puoi avere più controllo sulla porta per la tua app web. https://msdn.microsoft.com/en-us/library/vstudio/dd465323(v=vs.100).aspx – Gerardo