аутентификация веб-сервиса и управление идентификацией пользователя - PullRequest
0 голосов
/ 10 марта 2012

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

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

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

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

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

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

Добрый вечер

1 Ответ

0 голосов
/ 10 марта 2012

Я не совсем уверен, отвечает ли это на ваш запрос, но, поскольку пользовательский интерфейс всегда будет обрабатываться на стороне клиента, я думаю, вы можете использовать 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).

...