springCloud微服务系列——单点登录OAuth2+JWT

    研究了好久的springCloud微服务架构,在这里整理总结一下,做个梳理和备忘。

    这次总结的是微服务之间的认证。最近实现了一个基于spring security的适合单体应用和分布式应用,适合app和浏览器的一套自用鉴权框架。算是对spring security有了点比较深入的认识了,这里说一下通过OAuth2+JWT来解决微服务之间的鉴权问题。

    这里不会涉及到细节问题,关于spring security和OAuth2,JWT有很多很多的内容。特别是想要用好spring security,读它的源码是必不可少的。这里提供一个在学习过程中的一些笔记,记得比较混乱。

     《spring security的一些笔记》

     《spring oauth的一些笔记》

    另外说一下笔记中没有但是很重要也很基础的内容,spring security是通过filter链实现鉴权的。验证码的校验通过对比redis中的值进行验证,验证逻辑需要扩展一个filter并且放在UsernamePasswordAuthenticationFilter之前。短信验证码由于提供的是手机号,因此需要通过UserDetailsService去判断手机号是否存在,因此需要提供一个AuthenticationProvider调用UserDetailsService来做验证。验证的手机信息需要通过一个filter封装,该filter应该放在UsernamePasswordAuthenticationFilter之后,保证最后的Authentication类的对象是以手机号的检验为准。

    其实spring security本身提供了一个sso功能,也是使用OAuth2,也可以用JWT,但是有一点很尴尬,它不能在微服务中实现自己的资源服务器。我在微服务中提供自己的资源服务器后,就拿不到token了。如果没有自己的资源服务器,前后端分离后使用认证服务器中的token是不起作用的。这样的话对于浏览器,前后端没有分离的应用是可以的。但是对于app和前后端分离的应用就麻烦了。所以这里就来说一说怎么去做适用于app,前后端分离的OAuth2+JWT的单点登录。

    最后还有一个问题,如果用feign进行微服务之间的调用,请求头中的token会丢失。这个需要通过读feign的源码,进行相应的扩展,在调用httpClient之前将header中的信息加入被调用的微服务http请求中。

  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值