Intereting Posts
Где останавливать / уничтожать потоки в Android-классе? Методы переопределения Java при создании нового экземпляра класса Ошибка «Debug certificate expired» в плагинах Android Eclipse Веб-просмотр Android с помощью GSAP: попытка удалить локальную ссылку, отличную от JNI, сбросить поток Удаление и добавление действий в задний стек Ограничения видеозахвата в телефонном разрыве + плагины для родных Настройки доступа к открытому приложению Эмулятор Android 5.0 показывает, что пространство для хранения заканчивается Доступ к приложениям Android (для людей с ограниченными возможностями) с помощью PhoneGap Android делает снимок экрана через код Скрытые особенности разработки Android? Android с автоматической горизонтальной прокруткой TextView Android Geocoder getFromLocationName всегда возвращает null Нужно ли мне действительно передавать экземпляры контекста глубоко в приложение? Правильный макет для обнаружения маяка Kontakt на Android с помощью AltBeacon

Каков правильный способ проверки доступных токенов OAuth на сервере node.js?

Я пытаюсь аутентифицировать мобильное приложение для платформы Android на пользовательский node.js server api. Я хотел бы использовать токены Google OAuth2 для этого, вместо того чтобы откатывать мою собственную аутентификацию, поскольку устройства Android с установленным Google Play делают это доступным для разработчиков приложений. Я использую звонок GoogleAuthUtil.getToken из библиотеки Служб Google Play, GoogleAuthUtil.getToken здесь . Я пытаюсь следовать советам, изложенным в этом блоге разработчиков разработчиков Android

Метод getToken возвращает в моем случае длинную строку длиной 857 байт. Если я попытаюсь передать этот токен в конечную точку TokenInfo Google, он вернется:

{'Error': 'invalid_token', 'error_description': 'Недопустимое значение'}

Что я здесь делаю неправильно? В «области» вызова getToken я отправляю: audience:server:client_id:**i_put_my_clientid_here** . У меня есть клиент, сгенерированный для «установленных приложений». Используя этот идентификатор клиента, вызов getToken не работает вообще. Когда я создавал идентификатор клиента для «учетной записи службы», вызов преуспевает, но я получаю токен 857 байт, который терпит неудачу при передаче в конечную точку TokenInfo, как описано выше.

EDIT: Я также создал идентификатор клиента для «веб-приложений», поскольку, как представляется, это правильный идентификатор клиента, который следует использовать при вызове getToken . Но поведение такое же, я возвращаю токен 857 байт, который не проверяется при вызове конечной точки Google.

Как я могу правильно получить действительный токен аутентификации с помощью сервисов Google Play на Android? Как только у меня есть правильный токен, какова правильная библиотека node.js для проверки его на стороне сервера? Могу ли я использовать паспорт-google-oauth ?

Solutions Collecting From Web of "Каков правильный способ проверки доступных токенов OAuth на сервере node.js?"

Если вы просто хотите прочитать содержимое данных, возвращенных GoogleAuthUtil.getToken то процесс очень прост. Возвращенные данные – это просто JWT. Итак, все, что вам нужно сделать, это разделить данные на . Символ, а затем base64 (url) декодирует каждую часть.

Это немного сложнее, если вы хотите проверить подлинность сообщения. Просто используйте свою любимую библиотеку криптографии для проверки. 3-й компонент JWT – это подпись данных, и сертификаты Google являются общедоступными ; Это все, что вам нужно для проверки сообщения.

Хм, это скорее комментарий, а не ответ, но я не могу помещать символы перевода в эти строки:

  1. Это должен быть идентификатор Clent на веб-стороне, который идет в месте put_my_clientid_here
  2. Если GoogleAuthUtil.getToken () дает вам String с броском исключения, это действительно должно быть действительно. Когда вы нажимаете tokeninfo, используете ли вы … tokeninfo? Id_token = <857-byte-value-here>
  3. Если вы рубист, возьмите драгоценный камень google-id-token и посмотрите, может ли он подтвердить ваш токен с 857 байтами.

В течение недели я изучал, как проверять токены GoogleAuthUtil, полученные в приложении Android Client на сервере Node.js, с помощью файла паспорт.js

Наконец, я наткнулся на паспорт-google-символическую паспортную стратегию, которая прекрасно выполняет эту задачу.

https://www.npmjs.com/package/passport-google-token

Более подробная информация представлена ​​в приведенной выше ссылке.

Официальный SDK узла позволяет вам сделать это сейчас.

Вот ссылка: https://github.com/google/google-auth-library-nodejs/blob/master/lib/auth/oauth2client.js#L384

Я не слишком хорошо разбираюсь в деталях работы Android в отношении передачи токена с устройства на сервер. Мое общее впечатление, однако, заключается в том, что вы не проходите через типичный танцевальный танец OAuth. Вместо этого вы напрямую вызываете конечную точку «пользовательская информация», которая возвращает информацию, соответствующую пользователю, который держит токен, или отклоняет запрос, если токен недействителен. Обсуждается этот вопрос:

Проверка подлинности Android authToken на стороннем сервере

По сути, токен становится секретом, который разделяется между устройством и вашим сервером, поэтому его важно защитить.

Есть несколько стратегий для Facebook и Twitter, которые были разработаны для выполнения аналогичных действий с использованием токенов с устройств iOS:

https://github.com/drudge/passport-twitter-token
https://github.com/drudge/passport-facebook-token

Вы можете немного вдохнуть их и настроить, чтобы поговорить с конечными точками Google. Дайте мне знать, как это получается. Мне бы хотелось увидеть аналогичную стратегию «паспорт-google-токен», поэтому, если вы ее реализуете, дайте мне знать, и я свяжусь с ней!