2016-05-11 2 views
2

Согласно doc, для аутентификации с сервером бэкэнда я должен:Правильный способ аутентификации с сервером бэкэнда

  • отправить ID маркера пользователя к серверу с помощью HTTPS.
  • проверить целостность идентификатора и получить идентификатор пользователя из подзадачи идентификатора.

Эта работа достаточно хорошо, но как это сделать, если мне нужно пройти аутентификацию всего запроса на сервер?

Должен ли я хранить idToken (по приватным настройкам) и проверять его каждый раз на стороне сервера? Поскольку idToken имеет дату действия, клиент должен иметь возможность регенерировать его, когда он истек.

Или при первом подключении я должен вернуть одному идентификатору (без даты действительности) пользователю, который позволит ему связываться с сервером (кажется менее безопасным)?

+0

Привет, Томас, просто хотел понять, является ли токен, который вы извлекаете из GoogleSignInOptions, право JWT? Этот токен имеет срок действия всего 1 час. Не могли бы вы помочь мне понять, как обновить этот токен? Я получаю тот же JWT от GSO, хотя он истек. –

+0

Да, это JWT. Перед каждым вызовом API вы должны вызывать 'silentSignIn'. См. Это [ответ] (http://stackoverflow.com/a/37387199/3580745) – ThomasThiebaud

+0

Когда я звоню в silentSignIn через час, я все равно получаю тот же старый токен. Вот мой вопрос SO http://stackoverflow.com/questions/37363213/google-always-returns-expired-id-tokenjwt –

ответ

2

Маркер должен быть проверен при каждом запросе на сервер, это как ключ для каждого запроса. Этот ключ не действует в течение длительного периода времени, поэтому у вас обычно есть токен обновления, если вы хотите, чтобы «сеанс» был постоянным. Если у вас его нет, вам нужно будет аутентифицироваться снова каждый раз, когда срок действия токена истёк.

Итак, да, вы должны хранить токен на стороне клиента. Лучшая практика заключается в том, чтобы иметь действительно короткий срок действия, чтобы быть уверенным, что если токен компрометирует, у злоумышленника будет непродолжительное время для совершения злонамеренных действий.

+0

Спасибо. Кажется, что у меня нет токена обновления, поэтому я буду проверять подлинность каждый раз, когда он истек. – ThomasThiebaud

-1

Правильный способ аутентификации с помощью сервера backend использовать эту библиотеку, это очень быстро, чтобы извлекать данные или загружать данные на сервере beckend.

+0

Retrofit - http-клиент (и я уже использую его). Это не отвечает на мой вопрос – ThomasThiebaud

1

Я получаю технический ответ (ответ @ EmCode верен) в документе метода silentSignIn(). (Вот link).

GoogleSignInResult может содержать идентификатор, который может использоваться для аутентификации и идентификации сеансов, установленных с серверов приложений. Если вы используете время истечения срока годности идентификатора, чтобы определить время жизни сеанса, вы должны получить обновленный токен идентификатора, вызвав silentSignIn перед каждым вызовом API на ваш сервер приложений.

0

Смотрите, если это имеет смысл:

Эта работа довольно хорошо, но как это сделать, если я должен проверить подлинность всех запрос на сервер?

Я думаю, что цель входа в Google заключается в аутентификации пользователей по их учетным данным google. Это не означает подлинность всех ваших запросов клиентов на ваш собственный сервер. Что будет между вашим сервером и Google, должно быть только проверкой токена пользователя. После того, как токен подтвержден в порядке, последующий обмен данными C/S может использовать аутентификацию по вашему выбору, и не нужно каждый раз беспокоиться о google или заботиться о действительности маркера.

Если вы используете идентификатор маркера истечения времени, чтобы определить продолжительность жизни сеанса, вы должны получить обновленный ID маркер, с помощью вызова silentSignIn до каждого API вызова сервера приложений.

Да, если сеансы используются приложения, и вы хотите, чтобы маркер для определения достоверности, то вам нужно беспокоиться Google все время.

Смежные вопросы