Я интегрирую FOSOAuthServerBundle для обработки входа из мобильного приложения в бэк-офис Symfony2. Я следовал инструкциям этот ответ, но, как я никогда не использовал 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
Параметр добавлен:
{"error":"invalid_client","error_description":"The client credentials are invalid"}
Да, вы должны включить секрет клиента. Как только вы сделаете этот запрос, вы получите 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]
надеюсь, это прояснит немного больше для вас.
Когда вы создаете нового клиента с единственным разрешенным типом гранта «пароль», это не должно быть проблемой безопасности, поскольку секретный ключ клиента является открытым, и никто не сможет использовать его с грантом client_credential.