关于客户端模式

客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向”服务提供商”进行认证。严格地说,客户端模式并不属于 OAuth 框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求”服务提供商”提供服务,其实不存在授权问题。

pig 客户端模式使用 - 图1

  • A)客户端向认证服务器进行身份认证,并要求一个访问令牌。
  • B)认证服务器确认无误后,向客户端提供访问令牌。

客户端模式测试使用

① 给目标客户端分配客户端模式

pig 客户端模式使用 - 图2

② 参考 apifox 调用服务接口 导入 apifox 脚本直接调试即可

image.png

  • 返回报文
  1. {
  2. "access_token": "1af5faf2-bb8c-441d-952b-82df970ae474",
  3. "token_type": "bearer",
  4. "expires_in": 43199,
  5. "scope": "server"
  6. }

特别注意

  • 相较于密码模式,返回的数据不包含刷新令牌(令牌容易丢失,避免安全问题)。
  • 不存在用户概念,无法通过 SecurityUtils.getUser 获取当前用户 也无法通过 @PreAuthorize权限拦截
  1. @GetMapping("/client/nfo")
  2. public R getClientInfo(){
  3. // SecurityUtils.getUser() == null
  4. String requestClientId = SecurityUtils.getAuthentication().getName();
  5. return R.ok();
  6. }