有博客是这样解释的密码模式:
密码模式(resource owner password credentials):
用户向第三方客户端提供自己在授权服务端的用户名和密码,客户端通过用户提供的用户名和密码向授权服务端请求令牌(Access Token)。
Laravel使用密码授权的方式需要提交的参数如下:
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
],
]);
问题:
1、代码中的client_id是什么id,每个用户每人有一个client_id还是什么意思?
2、在密码模式的概念解释中,涉及到几个参与者:
(1)用户
(2)第三方客户端
(3)授权服务端
(4)客户端
有点分不清上面4个谁是谁,请大佬举个例子让它们对号入座。谢谢大佬!
client_id
是你这个应用在oAuth2网站注册的应用获得的。比如腾讯吧,虽然腾讯不一定是密码模式,但是这里举个例子。
如果你是一个A网站,需要获取用户在腾讯的账户信息,那么你需要在腾讯注册你的应用,获取你的
client_id
。这样在认证的时候,腾讯的OAuth就可以区分这个用户授权了哪些应用(你的A网站或者别人的B网站)。
当然了,为了防止伪造,还会另外有一个clinet_secret用于确认你使用的client_id确实是你这个网站所持有的。
还有你所不理解的几个参与者。
还是以上面的例子解释。
至于为什么要分成第三方客户端和客户端,这个主要是为了
secret_id
保密,如果你的secret_id
直接写在用户应用当中,那么谁都可以用你的A网站的身份去获取用户的信息了。所以secret_id
只能保存在后台。所以在这里可以理解成
客户端
就是指A网站的服务器,在面对腾讯的Oauth授权的情况下,腾讯是授权服务端,A网站后台是授权的客户端。暂时就写这么点,有说错或者还有不理解的话后面再补充