soringcloud接口鉴权_SpringCloud 服务鉴权

本文探讨了SpringCloud服务鉴权的重要性,提出了从密码认证到令牌认证的两个版本,强调了令牌自动刷新的需求,并详细阐述了令牌的生成、验证和刷新策略,旨在提高服务安全性和效率。
摘要由CSDN通过智能技术生成

1、服务鉴权:服务鉴权的流程

用户访问我们的微服务,都需要经过网关作为请求入口,网关对用户身份进行验证,从而保证微服务的安全。但是,大家有没有思考过这样一个问题:

如果你的微服务地址不小心暴露了呢?

一旦微服务地址暴露,用户就可以绕过网关,直接请求微服务,那么我们之前做的一切权限控制就白费了!

因此,我们的每个微服务都需要对调用者的身份进行认证,如果不是有效的身份,则应该阻止访问。

合法的调用者身份,其实就是其它微服务,还有网关。我们首先需要把这些合法的调用者身份存入数据库,并给每一个调用者都设置密钥。接下来的步骤就简单了:当访问某个微服务时,需要携带自己的身份信息,比如密钥

被调用者验证身份信息身份合法

如果验证通过则放行,允许访问

因此,我们必须在一个微服务来管理调用者身份、权限、当然还包括用户的权限,角色等,并对外提供验证调用者身份、查询调用者权限的接口,我们可以再授权中心中完成这些业务。

1)版本1-密码认证

流程图:

31674ba4486e628761f6e2d581d538a9.png

加入服务鉴权流程后有没有什么问题呢?

服务调用本来是访问者(client)与微服务(server)之间的交互,但是为了验证身份,不得不与授权中心交互。每次请求都会比原来多一次网络交互,效率大大降低。

能不能只验证一次呢?

2)版本2-令牌认证

如果我们将第一次验证后的身份信息生成一个令牌(token),以后每次请求携带这个token,只要验证token有效,就无需每次调用授权中心验证身份了!

服务调用方需要向授权中心申请令牌,而后每次请求微服务都携带这个令牌即可,而令牌的生成我们依然使用JWT规范来实现。如图:

3fda5eb6c06d750b93aba104898eefa3.png

整个过程是不是跟用户登录也请求服务有点像啊?

没错,其实服务授权,就是把微服务也当做用户来看待。区别在于服务授权无需注册,而是有管理人员提前录入服务及服务的权限信息。

不过这里依然有问题需要思考:请求令牌的动作什么时候做?

令牌过期以后如何生成新令牌?

3)版本3-令牌自动刷新问题1:请求令牌的动作什么时候做?我们肯定不希望频繁去申请令牌,所以应该在项目启动的时候,携带身份信息,去授权中心申请令牌,然后保存起来。

这个可以通过自定义配置类,在配置类中完成令牌的申请和保存,而配置类会在项目启动时加载

问题2:令牌过期以后如何生成新令牌?虽然我们不希望频繁去申请令牌,但是出于安全考虑,令牌最好有一定的过期时间,然后定期更新。

既然是定期更新,当然是定时任务来完成了

如图:

986174448e606f1b53080757bc359906.png

关键的步骤如下:授权中心提供接口:验证身份,签发jwt

所有微服务中通过定时任务,向授权中心发起请求,获取jwt

微服务每次请求都携带jwt在请求头中

被访问服务拦截请求,判断请求头中的jwt身份合法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值