Я разрабатываю остальные API в приложении Symfony.
Прямо сейчас мой apis используется моим приложением только во внешнем интерфейсе (запросы ajax от Angularjs). В будущем я хотел бы предоставить те же API сторонним приложениям.
Также в будущем у меня будут приложения для Android, iPhone и т. Д.
Я интегрировал FOSOAuthServerBundle и перепробовал все рабочие процессы типа предоставления. Это все работает. Но меня смущает, могут ли они использоваться моим приложением или они предназначены только для сторонних приложений, которым нравится интегрироваться с моим приложением?
Я понимаю, как эти рабочие процессы могут использоваться сторонними приложениями. Но на самом деле не могу понять, как я могу аутентифицировать своих собственных пользователей приложения?
Я хочу знать, как использовать этот пакет для аутентификации пользователей на моем веб-сайте с помощью rest apis из моего веб-приложения?
В настоящее время я использую FOSUserBundle и form_long для аутентификации пользователя, но я изменяю интерфейс для использования Angularjs и отдыха на основе. Таким образом, в идеале аутентификация должна работать как аутентификация form_login, но должна основываться на отдыхе.
Я провел исследование, и люди предлагают использовать «Учетные данные для пароля владельца ресурса», но для его раскрытия в javascript требуется секрет клиента, который может быть небезопасным.
Это должно работать, например Пользователь отправляет учетные данные имени пользователя / пароля, как это работает в случае form_login, но вместо перенаправления он должен просто вернуть access_token.
Нужно ли мне писать моего обычного провайдера аутентификации, который использует UsernamePasswordToken и прослушиватель брандмауэра, например OAuthListener, который возвращает access_token? Будет ли это безопасно использовать?
Подобный вопрос с некоторым обсуждением здесь:
Пароль типа предоставления Symfony2 FOSOAuthServerBundle требует секрет клиента
Если вы не хотите раскрывать секрет, используйте прокси между вашим внешним кодом и реальным сервером OAuth. В любом случае, если вы раскрываете секрет, ему все равно нужны учетные данные пользователя.
Вы можете установить разрешенные типы грантов для каждого клиента OAuth, поэтому в случае создания мобильных приложений вам нужно будет создать отдельную пару client_id & client_secret для приложения и для внешнего интерфейса с единственным разрешенным типом предоставления «пароль» для внешнего интерфейса.
Других решений пока нет …