1

Я применил сценарий GoogleAuthorizationCodeFlow от google api client dotnet и учебник, чтобы получить токен от того, что мой клиент отправил на сервер в качестве кода. но когда я называю flow.ExchangeCodeForTokenAsync, я получаю следующее сообщение об ошибке:google ExchangeCodeForTokenAsync invalid_grant в webapi

{"Error:\"invalid_grant\", Description:\"\", Uri:\"\""} 

Я прочитал google authorization invalid_grant и gusclass oauth 2 using google dotnet api client libraries, но они не помогли мне и. Я думаю, что это должно быть очень просто, но я не знаю, почему это не работает. Для стороны клиента, я использовал Satellizer и это мой сервер кода:

public bool PostExchangeAccessToken(GoogleClientAccessCode code) 
     { 
      string[] SCOPES = { "email" }; 
      IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer 
      { 
       ClientSecrets = new ClientSecrets() 
       { 
        ClientSecret = "******", 
        ClientId = "********.apps.googleusercontent.com" 
       }, 
       Scopes = SCOPES 
      }); 
      try 
      { 
       TokenResponse token; 
       token = flow.ExchangeCodeForTokenAsync("*****@gmail.com", Newtonsoft.Json.JsonConvert.SerializeObject(code), "https://localhost:44301/", 
           CancellationToken.None).Result; 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      return true; 
     } 

В чем проблема?

ответ

0

Вы можете проверить настройки консоли разработчика Google. (Авторизованный переадресовать идентификаторы URI) идентификаторы

Credentials => OAuth клиент +2,0 => Ваши приложения Настройки => Авторизованный перенаправлять URIs

Вы должны добавить сайт. ("https://localhost:44301/")

Мой код:

flow.ExchangeCodeForTokenAsync("me", authCode, redirectUri, CancellationToken.None).Result; 

Уполномоченные перенаправлять URIs

Для использования с запросами от веб-сервера. Это путь в приложении, к которому пользователи перенаправляются после того, как они прошли аутентификацию с помощью Google. Путь будет добавлен с помощью кода авторизации для доступа. Должен иметь протокол. Не может содержать фрагменты URL или относительные пути. Не может быть общедоступным IP-адресом.

1

На Github я обнаружил, что я должен использовать Token от клиента и использовать

GoogleAuthorizationCodeFlow.Initializer() 

создать свой UserCredential объект.

+0

Можете вставить код, пожалуйста? –