Como defino return_uri para GoogleWebAuthorizationBroker.AuthorizeAsync?
Estou tentando usar oAPI do Google Agenda no meuAplicativo da Web .NET não MVC. (Essa parece ser uma distinção importante.)
Eu tentei usar o código deeste exemplo no Google eeste exemplo no Daimto, juntamente com algumas dicas úteis de váriosposts relacionados aqui.
Eu escrevi o seguinte método:
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
}
O problema é que, quando a página OAuth2 do Google é chamada,redirect_uri
continua se preparando parahttp://localhost:<some-random-port>/authorize
. Não faço ideia de como definir isso para outra coisa, como no exemplo a seguir URL gerado porAuthorizeAsync
:
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
O Google responde com umredirect_uri_mismatch página de erro com a mensagem:
“O URI de redirecionamento na solicitação:http: // localhost: XXXXX / autorize / não correspondeu a um URI de redirecionamento registrado "
Só posso registrar tantos URIs de redirecionamento na página Credenciais do console do desenvolvedor do Google. Não estou inclinado a registrar 65535 portas e quero usar uma página que não seja/authorize
no meu site Especificamente, quero usar, durante o desenvolvimento,http://localhost:888/Pages/GoogleApiRedirect
mas não tenho idéia de onde eu definiria isso, além do que fiz no console do desenvolvedor.
Como defino explicitamente o valor deredirect_uri
? Também estou aberto a uma resposta na forma "Essa abordagem está completamente errada".
EDITAR:
Depois de brincar com isso no dia anterior, descobri que, usando o ID do cliente / segredo do cliente para o aplicativo nativo em vez do aplicativo da web, posso pelo menos acessar a página de autorização da web do Google sem queixar-se de umaredirect_uri_mismatch. Isso ainda é inaceitável, porque ainda retorna aohttp://localhost:<some-random-port>/authorize
, que está fora do controle do meu aplicativo da web.