Поток OAuth2 без перенаправления uri

Я создаю приложение для Android / iOS, которое взаимодействует с узлом.JS server и хотел бы безопасно идентифицировать их на моем сервере с помощью Google (и / или Facebook) и OAuth2. Я просмотрел следующую документацию:https://developers.google.com/+ / web / вход / Серверный поток

мне не нужна авторизация, мне нужна только аутентификация (я хочу только убедиться, что человек, вызывающий мой узел.JS service-это человек, о котором они говорят). Достичь этого, если Я правильно понимаю, я должна позволить пользователю войти в систему с помощью Google на стороне клиента, это даст им код, который они могут дать на мой сервер. Затем мой сервер может обменять этот код на access_token и, следовательно, получить информацию о пользователе. Затем я гарантирую, что пользователь-это человек, о котором они говорят.

в документации Google (ссылка выше) говорится: "в поле URI авторизованного перенаправления удалите значение по умолчанию. Он не используется для этого случай."однако, для моего сервера, чтобы обменять authorization_code на access_token, это должен для обеспечения redirect_uri, Я что-то пропустила?

на redirect_uri бесполезно для игр Unity, например (так как вход в систему с помощью Google просто открывает новое "окно", которое закрывается при входе в систему, без перенаправления).

TL; DR Как использовать OAuth2 для проверки подлинности пользователей между моим клиентом и сервером без переадресации?

4 ответов


TL; DR как вы используете OAuth2 для аутентификации пользователей между моим клиентом и моим сервером без перенаправления?

ты не можешь. OAuth требует, чтобы пользователь был направлен на экран авторизации (и, возможно, входа в систему), а затем перенаправлен обратно в ваше приложение.


вы смотрели эту документацию? https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi

выбор URI перенаправления

когда вы создаете идентификатор клиента в консоли разработчиков Google, два redirect_uris созданы для вас:urn:ietf:wg:oauth:2.0:oob и http://localhost. Значение, используемое приложением, определяет, как код авторизации возвращается в ваше приложение.

http://localhost

это значение сигнализирует серверу авторизации Google, что код авторизации должен быть возвращен в качестве параметра строки запроса веб-сервер на клиенте. вы можете указать номер порта без изменение конфигурации консоли Google Developers. Получать код авторизации используя этот URL, приложение должно прослушивать на локальном веб-сервере. Это возможно на многих, но не всех, платформы. Если ваша платформа поддерживает это рекомендуемый механизм получения кода авторизации.


на redirect_uri может быть URL с пользовательской схемой URL, для которой клиент зарегистрировал обработчик. Это описано здесь: Что такое URI перенаправления? как это относится к приложению iOS для OAuth2.0?. Речь идет не столько о" перенаправлении", сколько о конечной точке обратного вызова вашего приложения.


У меня была эта проблема, и мне потребовались века, чтобы найти решение "postmessage", которое Nepoxx упоминает в комментариях принятого ответа здесь.

для уточнения, вот что работает для меня.

  1. выполните шаги 1-6 здесь:https://developers.google.com/identity/sign-in/web/server-side-flow
  2. установить библиотеку googleapis npm install --save googleapis
  3. для обмена токенами на стороне сервера выполните следующее:

    var googleapis = требуют('googleapis'); var OAuth2 = googleapis.автор.Что OAuth2;

    var oauth2Client = новый OAuth2( GOOGLE_SSO_CLIENT_ID, GOOGLE_SSO_CLIENT_SECRET, 'postmessage' // здесь вы можете указать redirect_uri );

    oauth2Client.getToken (CODE_FROM_STEP_5_OF_INSTRUCTIONS, функция (err, токены) { // Теперь токены содержат access_token и необязательный refresh_token. Сохранить их. });