2012-04-25 3 views
3

У меня есть веб-приложение LAMP-stack, которое предоставляет API REST. Цель состоит в том, чтобы иметь 3 уровня - databse, services (REST) ​​и несколько интерфейсных клиентов (веб-сайт, Android, iPhone). В настоящее время эти уровни находятся в одной коробке. Веб-сайт использует API для совершения вызовов логики обслуживания для операций CRUD, мобильные клиенты еще не построены.OAuth 2 для мобильных клиентов, которым я владею

Я использую реализацию PHP bcrypt для хранения учетных данных пользователя. Это медленный/интенсивный процессор по дизайну. Каждый вызов API принимает пару имени пользователя и пароля вместе с параметрами API. Это будет препятствовать масштабному масштабированию, потому что хэш вычисляется при каждом вызове API.

Итак, я рассматривал альтернативы. OAuth 2.0 использует отменяемые токены, которые не стоят дорого, но статьи, которые я прочитал, по-видимому, предполагают, что основной вариант использования этого протокола - позволить сторонним пользователям получить доступ к моему API. Это не совсем подходит моей модели, поскольку мобильные клиенты, например, принадлежат мне.

  1. ли OAuth предназначены только для использования с третьими сторонами, или это характерно для компании, чтобы добавить свои мобильные клиенты, как OAuth потребителей для своего собственного API?

  2. Можно ли связать общий секрет с приложением Android/iPhone, которое я публикую на рынке приложений, так что они сразу могут связываться с API?

ответ

3

OAuth v2 (http://oauth.net/2/) имеет ряд моделей аутентификации (6 всего), и хотя «3 ноги» сценарий с конечными пользователями авторизации 3rd приложений сторонних наиболее видимо, это определенно хороший подход, даже если у вас есть приложения.

Вы можете использовать поток с двумя ногами, например поток доверенных учетных данных http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-4.3. В основном вы доверяете клиентскому коду (вы его написали), чтобы получать и видеть имя пользователя и пароль пользователя и отправлять его в свой API. Как только это будет сделано, токены oAuth являются нормальными, и пароль не нуждается в повторном подключении.

Второй вопрос по секретному сектору - если ваше приложение всегда требует входа в систему, то вы можете избежать добавления общего секрета в приложение, поскольку ваша аутентификация зависит от учетных данных пользователя (в этом случае просто введите идентификатор в приложение, чтобы вы знали, какая версия). Если приложение работает без входа в систему в некоторых режимах, то у вас, вероятно, будет мало выбора, кроме как встроить секрет какого-то рода, по крайней мере, для шагов init.