密码模式下用clientid、clientSecret取到的Token,和用grant_type、username、password获取的token有区别吗?
我的理解是:
第一种,grant_type、username、password:密码模式下,client应用直接把用户引导到IdentityServer提供的验证页面,验证成功就跳转回Client应用并携带Token信息,这里和clientid、clientSecret没一毛钱关系。
第二种,clientid、clientSecret:只要有这个两个就可以获取token,所以client一定是受信任的才可以。
上面取到Token有什么区别?第一种Token只能取到登录者信息资源、第二种可以获取所有信息资源?
这是两种授权模式,你有一个公开访问的API
,你并不希望所有人都可以访问的时候,你可以使用client_credentials
授权模式,进行保护API
,因为只要你不提供client_id
以及client_secret
,别人就无法获取token
,也就无法调用你API
。client_credentials
获取的toke
可以获取大部分的接口,但是在访问获取当前用户的个人信息等接口的时候,是无能为力的,因为该token
中并没有包含任何的用户信息用于确定用户身份,也就不知道你是谁,要获取谁的数据。这种情况下,你就需要authorization_code
授权模式或 password
模式,必须验证用户身份后才可以访问,这种场景下,你可以主动的添加一些用户信息以及权限信息到生成的token
中。这样的token
是带有用户信息。这种授权模式是可以访问client_credential
授权接口之外,访问有关用户相关的接口。而前面一种都只能访问普通的接口。
有道理,所以两者需要同时使用,清晰明了,谢谢啦。前者确定你是什么客户端,后者确定你是誰。
这个其实是一个 客户端和资源拥有者 的问题。
前者需要使用我的API,就得到我这 申请 appkey 和 appsecret,这样从我服务端API来说就明确了哪个应用在调用API
后者是一个具体的用户,寄托在客户端上。username、password其实就是一个登陆的过程。明确这个用户是否正确认证,权限有哪些?
这两种只是使用的场景不同。
有道理,所以两者需要同时使用,清晰明了。谢谢啦