Пароль типа предоставления Symfony2 FOSOAuthServerBundle требует секрет клиента

0

Я интегрирую FOSOAuthServerBundle для обработки входа с мобильного приложения в резервное хранилище Symfony2. Я следовал инструкциям этого ответа, но, поскольку я никогда не использовал OAuth2 прежде чем я немного OAuth2.

Я попытался войти в систему с помощью пароля ' grant_type ', но по какой-то причине он не будет работать, если я не client_secret как параметр GET. Действительно ли я должен?

Вот как выглядит мой запрос:

http://myserv.local/app_dev.php/oauth/v2/token?client_id=1_4up4x3hpaask4g0sok0so8sg00gk48c44cc0wkwwsg8048wcog &grant_type=password &[email protected] &password=somepassword

Он возвращает этот ответ, если не client_secret параметр client_secret:

{"error":"invalid_client","error_description":"The client credentials are invalid"}

Теги:
oauth-2.0

2 ответа

2

Да, вы должны включить секрет клиента. После того, как вы сделаете этот запрос, вы получите access_token, который может использоваться с каждым каждым будущим запросом, чтобы вам не нужно снова использовать учетные данные или информацию о клиенте до истечения срока действия access_token. И когда истекает токен, даже тогда вам не нужно будет снова использовать учетные данные пользователя, вы можете использовать refresh_token, а также идентификатор клиента и секрет, чтобы получить новый access_token. Поэтому ваш первоначальный запрос должен выглядеть так:

http://localhost/oauth/v2/token?client_id=[CLIENT_ID]&client_secret=[SECRET]&grant_type=password&username=[USERNAME]&password=[PASSWORD]

и в ответе вы получите access_token, который можно использовать следующим образом:

http://localhost/api/users?access_token=[ACCESS_TOKEN]

надеюсь, это разъясняет вам немного больше.

  • 1
    Дело в том, что секрет клиента не должен быть публичным. Это будет означать включение его в приложение, что позволит любому пользователю использовать тип предоставления Client credential ... Я не уверен, что так должно быть.
  • 0
    оно не более общедоступно, чем учетные данные базы данных. Вам не нужен новый клиент для каждого пользователя, который входит в систему. В вашем случае ваше мобильное приложение будет считаться клиентом. Таким образом, вам нужно только сгенерировать идентификатор клиента и секретный код один раз, а затем использовать его в качестве своих «учетных данных» для доступа к API из вашего мобильного приложения, а имя пользователя и пароль - это учетные данные для авторизации пользователя для доступа к различным частям API.
Показать ещё 5 комментариев
1

Когда вы создаете нового клиента с единственным разрешенным типом типа "пароль", это не должно быть проблемой безопасности, что секрет клиента является общедоступным, и никто не сможет использовать его с предоставлением client_credential.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню