Зарегистрировать пользователя в Symfony с помощью OAuth-клиента

#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. не опасно ли сохранять идентификатор клиента и секрет в клиенте в случае приложения? они могут быть в состоянии обнаружить это и злоупотреблять этим