Официальный сайт студ.городка НГТУ
Программирование и БД » аутентификация на сервере 

#1  27.04.13 18:37

аутентификация на сервере

есть сервер и есть андроид клиент. пользователь через приложение андроид может просматривать сообщения, добавлять новые и тд.
на данный момент при подключении к серверу приложение отправляет логин Google (username@gmail.com) на сервер, где происходит поиск этого логина в базе логинов, и в приложение передаются сообщения, соответствующие этому пользователю. Соответственно добавляемые сообщения заносятся в базу на сервере и помечаются как принадлежащие этому клиенту.
гугл логин берется из устройства через менеджер аккаунтов. предполагается, что раз клиент скачал приложение из гугл маркета, то и логин гугла у него имеется.

все это естественно небезопасно: любой может послать на сервер запрос, указав логин, и получить чужие сообщения.

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

насколько я понял, oauth позволяет с сервера или клиента получать доступ к api сервера oauth (гугл, вконтакте и тд.), что собственно мне не нужно. нужно чтобы, если клиент авторизован в гугл аккаунте, тогда и к серверу может получить доступ.

куда копать? что читать?

Offline

#2  29.04.13 15:23

Re: аутентификация на сервере

Ну oauth и есть для этого. Принцип в том что ты хранишь у себя токен пользователя, который ты получаешь от API какой либо системы и который выдает для токена уровень доступа. Плюсы этого ты сразу получаешь его имя/фимилию/логин/д.р. если нужно. В чем проблема то именно?

Offline

#3  30.04.13 01:05

Re: аутентификация на сервере

начитался про oauth и openID...
собственно последний больше подходит под мои цели, т.к. кроме логина мне ничего не надо, но соцсети поддерживают oauth, значит придется там копаться.

возникает проблема: из приложения пользюк будет отправляться в браузер, а потом обратно. И так пользователь идентифицируется в мобильном приложении.
Чтобы включить в эту схему мой сервер, надо чтобы он самолично общался с поставщиком oauth, а пользователю через приложение говорил, что делать (открыть браузер, аутентифицироваться вконтакте/гугле/и тп., прислать подтверждение авторизации). А дальше сервер будет доверять, что это именно тот пользователь, до тех пор пока идет соединение (прием/отправка сообщений), потом следует разрыв и снова аутентификация через поставщика oauth. Либо общаться через хттпс и хранить на сервере и клиенте некий токен, который говорит, что это и есть тот пользователь. А этот токен можно и подменить...

Но! Тогда получается, что коли приложение берет имя аккаунта гугла из самого андроида через встроенные методы, то андроид "отвечает" за то, что этот клиент и есть он, а общение между клиентом и сервером проводить по хттпс. Этот логин на андроиде доступен только после того, как пользователь ввел пароль на андроиде (после перезагрузки регулярно запрашивает), а значит уже прошел аутентификацию и... oauth не нужен? Тут, правда, проще подменить пользователя - достаточно по хттпс передать логин (который несложно узнать) и сервер будет думать, что это есть истинный пользователь => от хттпс толку мало.

В итоге:
1)с oauth надежнее, но возникает проблема регулярной авторизации (моб. приложение != браузер, а значит никаких куки)
2) oauth + некий свой токен (например, на сутки): остается проблема авторизации каждые сутки + неудобная схема авторизации: клиент - сервер - клиент - браузер - клиент - сервер (мельтешащие окошки браузера и приложения)
3) не очень надежный способ передачи логина (вернее ненадежный), зато без геморроя

все выше описанное - "мысли вслух", которые надо направить в нужном направлении :)

Исправлено ЙожжЫк (30.04.13 01:06)

Offline

Программирование и БД » аутентификация на сервере 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.188 сек.
Выполнено 14 запросов.