首页 文章

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

提问于
浏览
0

我正在开发一个使用Spring Oauth2, password flow保护的应用程序 .

但是我仍然对Spring中UserDetailService和ClientDetailsService流程之间的区别感到困惑 .

据我所知,从OAuth2规范来看,客户端和用户是不同的实体 . ClientclientIdclientSecret 和一些 grantsUserusernamepassword 还有一些 grants .

多个用户使用相同的客户端(在我的情况下是移动应用程序或Web浏览器) .

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

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

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

我的问题:

  • 我是否正确理解了这个过程?

  • 客户授予和用户授权是否具有相同的含义?

  • 我应该自定义哪些类来分隔客户端和用户凭据的验证?

1 回答

  • 0

    解决方案很简单 .

    客户端和用户实际上是不同的实体要获取访问令牌,您需要在头部和 username/password of the user in params 中使用 Base64 encoded client credentials 完成基本身份验证 .

    标头伪代码:

    Basic Base64("client_id:client_secret")

    PARAMS:

    username=username, password=password, grant_type=password

    这将返回access_token,refresh_token和一些额外的信息 .

相关问题