Аутентификация веб-сервисов и управление идентификацией пользователей

В настоящее время моя команда работает над довольно крупным проектом. Мы работаем над онлайн-игрой, которая будет доступна (на данный момент) двумя способами: -Via веб-браузер, приложение с полным JavaScript (на стороне клиента), полное Ajax (в основном это означает, что пользовательский интерфейс будет управляться в стороне клиента JS). -Via приложение для iPhone (пользовательский интерфейс будет управляться самим приложением).

Между двумя различными приложениями основная логика остается прежней, поэтому я считаю (я мог ошибаться), что лучшим решением будет создание веб-службы (если возможно, с использованием таких стандартов, как RESTful или Rest), способных перенести все необходимые операции.

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

Ive заглянул в WS-security, но для этого явно требуются пароли, которые нужно хранить, незашифрованные на сервере, что неприемлемо! Затем я посмотрел на Oauth, но на первый взгляд это казалось большой работой по настройке и не особенно подходит для моих нужд (способ, которым приложения должны быть приняты, не радует меня, поскольку это будет мое приложение и мое приложение только используя веб-службу, а не внешнее приложение). Я читал и слышал о многих других способах делать то, что хочу, но, честно говоря, я немного смущен, и я не знаю, какая информация надежна, а что нет.

Я хотел бы отметить, что Im использует symfony2 для бэкэнд и jquery для JavaScript на стороне клиента. Кроме того, я хотел бы получить подробный пошаговый ответ, потому что меня действительно путают со всем, что я прочитал и услышал.

Спасибо за ваше время, и я надеюсь, что кто-то может помочь мне в ее весьма срочном порядке.

Добрый вечер

1 ответ

Я не совсем уверен, отвечает ли это на ваш запрос, но поскольку пользовательский интерфейс всегда будет обрабатываться на стороне клиента, я думаю, вы могли бы использовать аутентификацию без аутентификации HTTP:

Это брандмауэр в security.yml:

security: firewalls: api: pattern: ^/api/ # or whatever path you want http_basic: ~ stateless: true

И тогда идея в основном заключается в том, что на сервере вы используете своих обычных поставщиков пользователей, кодеры и многое другое для обеспечения максимальной безопасности, а на клиенте вы отправляете заголовки HTTP-аутентификации, например, в jQuery:

$.ajax("...", { username: "Foo", password: "bar"
});

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

Вы также можете проверить руководство по безопасности Symfony2 для получения дополнительной информации о том, как настроить HTTP-аутентификацию. Также не забудьте принудительно использовать HTTPS-доступ в ACL, поэтому запросы, содержащие учетные данные, будут защищены (requires_channel: https в ваших определениях ACL).

licensed under cc by-sa 3.0 with attribution.