#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

