我正在开发一个使用Spring Oauth2 password
流程保护的应用程序。
但是我仍然对Spring中UserDetailService和ClientDetailsService流程之间的区别感到困惑。
据我所知,从OAuth2规范来看,客户端和用户是不同的实体。 客户有clientId
,clientSecret
和部分grants
,用户有username
,password
和还有一些grants
。
多个用户使用相同的客户端(在我的情况下是移动应用或网络浏览器)。
所以我需要对一些用户进行身份验证并为其提供访问令牌。
我已经实现了UserDetailsService
和ClientDetailsService
(包含所有需要的基础结构:AuthorizationServerConfigurerAdapter和ResourceServerConfigurerAdapter),在身份验证期间,我看到,请求中的用户名作为clientId
传递到clientDetailsService并且
作为username
进入userDetailsService。
但我认为它应该是更复杂的过程,例如身份验证请求客户端应提供客户端凭据和用户凭据,以便我可以验证客户端(它是否在我的系统中注册)及其授权然后验证用户及其授权然后返回访问令牌。
我的问题:
答案 0 :(得分:0)
解决方案很简单。
客户端和用户实际上是不同的实体
要获取访问令牌,您需要使用标头Base64 encoded client credentials
中的username/password of the user in params
完成基本身份验证。
标头伪代码:
Basic Base64("client_id:client_secret")
PARAMS:
username=username, password=password, grant_type=password
这将返回access_token,refresh_token和一些额外信息。