Установите клиентскую часть токена с помощью Rest API в Symfony2

Я сделал Rest API с symfony2 на одном сервере (S1).

Я сделал приложение с symfony2 на одном сервере (S2).

S1: работает хорошо. Он дает json-ответ на информацию пользователя, зависит от указанного URL-адреса.

S2 : работает хорошо. Спросите URL с завитком. Используйте wsse в заголовке http для получения важной информации о пользователе.

Я хочу войти в систему своих пользователей (из S2), используя базу данных S1. Но когда я нахожусь в S2, после ответа json с информацией о пользователе я не знаю, что мне нужно делать и как это сделать...

Сторона приложения: - Symfony2

Сторона API: - Symfony2 - FOSUserBundle - FOSRestBundle - JMS

Я впервые пытаюсь создать Rest API, поэтому, возможно, я плохо понимаю, как это работает.

Заранее спасибо.

EDIT: Для получения дополнительной информации.

  • 1: Пользователь 1 использует форму входа и отправляет ее.
  • 2: S2 Создайте заголовок http с параметром x-wsse (Nonce/Timestamp/Username/Password...)
  • 3: S2 отправляет этот заголовок на S1 с помощью curl
  • 4: S1 извлекает данные и, если в заголовке есть хорошая информация, отправляет обратно информацию пользователя (в json) или выполняет некоторые действия.
  • 5: S2 извлекает json-информацию о пользователе из S1.
  • 6: я могу отобразить страницу так, как хочу пользователю 1

Теперь моя проблема в том, что мне нужно сделать то же самое для новой страницы, но я не хочу запрашивать у своего пользователя пароль и имя пользователя во второй раз, потому что для него он входит в систему.

Надеюсь, стало понятнее.

EDIT 2: Моя проблема резюмируется одним предложением.

В Symfony2 с аутентификацией wsse, как я могу получить токен пользователя и отправить его на сторону клиента после аутентификации в API.

:p


person ElJackiste    schedule 15.06.2014    source источник


Ответы (2)


Вам нужно создать пользовательскую аутентификацию. К счастью для вас, эта статья в кулинарной книге Symfony покажет вам, как это сделать с помощью WSSE:

http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

person Debreczeni András    schedule 15.06.2014
comment
Да, я уже следил за этим документом для развертывания пользовательской аутентификации на сервере S1. Как я уже сказал, API делает хорошую работу, я получаю json из API с аутентификацией, но я не знаю, как я могу установить токен или что-то в этом роде, чтобы мне не приходилось все время спрашивать пароль у моих пользователей. на стороне приложения. Может быть, я не делаю это хорошо, мне нужно также развернуть пользовательскую аутентификацию на стороне приложения? - person ElJackiste; 15.06.2014

Ваше приложение S1 возвращает токен при аутентификации из приложения S2, верно?

Затем все, что вам нужно сделать, это сохранить этот токен где-то в вашем приложении S1 (сущность, Redis, ... что угодно), и когда иностранное приложение (например, ваше приложение S2) запрашивает ресурс, предоставляя этот запрос с токеном , вам просто нужно проверить, существует ли токен и действителен ли он.

Если да, то вы можете аутентифицировать пользователя на S1 с помощью компонента безопасности Symfony.

person Talus    schedule 15.06.2014
comment
Привет. На самом деле S1 возвращает json-ответ данных пользователя, если заголовок http (отправленный клиентом) хорош (одноразовый номер + метка времени + дайджест...). Итак, в S2 у меня просто ответ json, а не токен. После того, как я сделаю клиент (S2) для запроса ресурсов, но я не знаю, как управлять токеном. Я читал, что цель состояла в том, чтобы отправить запрос заголовка, созданный с паролем и именем пользователя. После обменяйте жетон. Но я точно не знаю, как это сделать... - person ElJackiste; 15.06.2014
comment
Ну, на самом деле это заключается в одном предложении (например, резюме вашего вопроса): вам нужно сгенерировать токен, отправить его на S2 и каждый раз просить S2 отправлять его (через заголовок, аргумент запроса, .. . Выбор за вами). Затем, на S1, для каждого запроса вы можете проверить действительность вашего токена (существует ли он? Он все еще действителен? Кому он принадлежит?). В этом суть API. :) - person Talus; 15.06.2014
comment
Спасибо. Это было то, что я думал. Но я ожидал, что какой-то код поможет мне, потому что я блокирую эту часть. Мой провайдер аутентификации создан с официальной документацией Symfony и работает хорошо. Но теперь я в своем контроллере, и мне нужно ответить клиенту, и я не знаю, как сгенерировать токен и с чем... pastebin.com/pHxMTitb - person ElJackiste; 15.06.2014
comment
Я попытаюсь отредактировать свой ответ, когда у меня будет время добавить код, но у вас что-то есть в пасте, хотя это должно быть на вашем S1. - person Talus; 16.06.2014