#symfony #oauth
#symfony #oauth
Вопрос:
Я создаю REST api с использованием Symfony2, FOSRest и FOSUser. Я только что внедрил сервер OAuth v2 с помощью FOSOAuthServer, но у меня есть некоторые вопросы, на которые нет ответов в Google:
- Как правильно реализовать регистрацию пользователя на моем сервере с помощью клиента OAuth (т.Е. Приложения для Android)?
- Есть ли стандартный URL-адрес для вызова в этой ситуации (например
/oauth/v2/auth_signup
, или что-то более спокойное)? - Должно ли это действие регистрации быть защищено сервером oauth? Я думаю, что этого не должно быть, поэтому это означает, что должен быть создан новый брандмауэр, чтобы исключить oauth для этого URL, как это имеет место для
/oauth/v2/auth
Ответ №1:
В контексте OAuth ваше приложение для Android будет иметь client_id, client_secret и т.д. Вы могли бы использовать client_credentials
grant_type, чтобы получить access_token для этого приложения.
GET /oauth/v2/token?grant_type=client_credentialsamp;client_id=cIdamp;client_secret=cSecret
.
Таким образом, теперь вы можете вызвать, например, POST /api/register
пользователя в теле и зарегистрировать его. Этот вызов может быть защищен, но поскольку вы вошли в систему с помощью приложения, вы выполняете вызов.
Но вы также можете создать или создать собственный grant_type. Для instace
GET /oauth/v2/token?grant_type=customamp;client_id=cIdamp;client_secret=cSecretamp;username=uamp;password=p
можно проверить, существует ли пользователь с этим именем пользователя, и зарегистрировать его, если нет.
Комментарии:
1. Спасибо за ответ! 🙂 Итак, ваше первое решение означает, что токен доступа доставлен, но еще не связан с пользователем? Редактировать: не должно быть проблемой, поскольку client_crendentials означает для этого случая, нет?
2. Точно. access_token с помощью FOSOAuth может быть связан с клиентом или с клиентом и пользователем. Пользователь может быть нулевым, это означает, что access_token действителен только для клиента. Я думаю, что это и есть цель client_credentials, да. Предоставить доступ к вызовам, для которых не требуется какой-либо зарегистрированный пользователь.
3. не опасно ли сохранять идентификатор клиента и секрет в клиенте в случае приложения? они могут быть в состоянии обнаружить это и злоупотреблять этим