Spring Oauth2客户端和用户凭证组合

时间:2018-04-05 11:06:38

标签: java spring spring-security-oauth2

我正在开发一个使用Spring Oauth2 password流程保护的应用程序。

但是我仍然对Spring中UserDetailService和ClientDetailsS​​ervice流程之间的区别感到困惑。

据我所知,从OAuth2规范来看,客户端和用户是不同的实体。 客户clientIdclientSecret和部分grants用户usernamepassword和还有一些grants

多个用户使用相同的客户端(在我的情况下是移动应用或网络浏览器)。

所以我需要对一些用户进行身份验证并为其提供访问令牌。

我已经实现了UserDetailsServiceClientDetailsService(包含所有需要的基础结构:AuthorizationServerConfigurerAdapter和ResourceServerConfigurerAdapter),在身份验证期间,我看到,请求中的用户名作为clientId传递到clientDetailsS​​ervice并且  作为username进入userDetailsS​​ervice。

但我认为它应该是更复杂的过程,例如身份验证请求客户端应提供客户端凭据和用户凭据,以便我可以验证客户端(它是否在我的系统中注册)及其授权然后验证用户及其授权然后返回访问令牌。

我的问题:

  1. 我是否正确理解了这个过程?
  2. 客户授予和用户授权具有相同的含义吗?
  3. 我应该自定义哪些类来分隔客户端和用户凭据的验证?

1 个答案:

答案 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和一些额外信息。