Spring Authorization Server 系列(三)code换取token

概述

在获取到code后,就可以使用code换取token了,但在换取token这一步还会对客户端进行一些校验,而这也支持不同的方式,一起来看看。

客户端认证方式

在这里插入图片描述

  1. JwtClientAssertionAuthenticationConverter
    这里面又包含两种具体的方式:
  • ClientAuthenticationMethod.PRIVATE_KEY_JWT:这里直接以私钥生成一个 JWT 令牌发给授权服务器,然后将公钥暴露给授权服务器,授权服务器通过公钥来验证这个jwt,从而验证客户端。
  • ClientAuthenticationMethod.CLIENT_SECRET_JWT:这种方式是以客户端密钥创建jwt发送给授权服务器,由授权服务器根据客户端密钥进行验签,从而验证客户端
    其实这两种都是 JWT 的签名用法,只是加签的密钥不一样
  1. ClientSecretBasicAuthenticationConverter
    这是客户端直接传递以请求头的方式传递密钥,注意这里须用https保证安全,而且都是后端交互,以下两种本质都一样,只是一个是手动添加header;一种是由协议转换后添加,这种更标准化,也就是所谓的HTTP Basic 认证

    • 直接在header 中传递 客户端id和密钥,
      先用 :连接clientId和clientSecret;
      然后,再进行Base64编码;
      最后,前面拼上 Basic + 空格
      Authorization = Basic Base64(clientId:clientSecret)
    • 直接在url中传递嵌入客户端id和密钥,由HTTP协议层处理,这其实算是HTTP协议下 URL 规范的一部分。
      形式为
    protocol://[user:password@]hostname[:port] / path / [:parameters][?query]#fragment
    
  2. ClientSecretPostAuthenticationConverter
    这种比较好理解,直接在POST请求中将客户端id和密钥传过去
    这里可以直接将 以 查询参数body(x-www-form-urlencoded) 两种方式传递
    在这里插入图片描述
    在这里插入图片描述

http://localhost:9000/oauth2/token?grant_type=authorization_code&code=GvwOHTwHfnk50lwQOK1mLyYqOeARBpUUQzt1mSPPLWndqt51rV9sYDJmUmYY04HpRoTNhMH1XmFI-AT0FnVkjdEOKqHOdMeIh_9I-Sc1XSVP_MTp6h9ChdF9wYNI86Y&redirect_uri=http://www.baidu.com&client_id=messaging-client&client_secret=secret
  1. PublicClientAuthenticationConverter
    这种方式就是为了之前提到的公共客户端而创建的,这种客户端校验,使用的不是客户端密钥,而是客户端每次随机生成的一个编号保存起来,并对其进行 SHA-256 散列算法,生成一个hash值,并将 散列算法和和hash值传给授权服务器。
    在换取token阶段,客户端再将 原始值传给授权服务器,授权服务器再以同样的算法得到一个 hash值。二者比较,匹配则校验成功。
    在这里插入图片描述

换取结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值