我正在整合FOSOAuthServerBundle来处理从移动应用程序到Symfony2后台的登录。我已按照this answer的说明操作了,但在我有时丢失之前,我从未使用过OAuth2
。
我尝试使用'密码'登录grant_type
但由于某种原因,除非我将client_secret
指定为GET
参数,否则它无法工作。我真的应该这样做吗?
这是我的要求:
http://myserv.local/app_dev.php/oauth/v2/token
?client_id=1_4up4x3hpaask4g0sok0so8sg00gk48c44cc0wkwwsg8048wcog
&grant_type=password
&username=test@test.com
&password=somepassword
除非添加client_secret
参数,否则它将返回此响应:
{"error":"invalid_client","error_description":"The client credentials are invalid"}
答案 0 :(得分:2)
是的,您应该包含客户端密钥。一旦发出此请求,您将获得一个access_token,可以与每个未来请求一起使用,这样您就不需要再次使用凭据或客户端信息,直到access_token到期为止。当令牌过期时,即使这样您也不需要再次使用用户凭据,您可以使用refresh_token以及客户端ID和机密来获取新的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 :(得分:2)
当您使用唯一允许的授予类型“password”创建新客户端时,这不应该是客户端机密是公开的安全问题,并且没有人能够将其与client_credential grant一起使用。