美文网首页架构Spring Cloud框架
支持Nacos 2.1.0!微服务权限终极解决方案,Spring

支持Nacos 2.1.0!微服务权限终极解决方案,Spring

作者: 老程不秃 | 来源:发表于2022-08-02 11:50 被阅读0次

    实现思路

    首先还是来聊聊这套解决方案的实现思路,我们理想的解决方案应该是这样的,认证服务负责统一认证,网关服务负责校验认证和鉴权,其他API服务则负责处理自己的业务逻辑。安全相关的逻辑只存在于认证服务和网关服务中,其他服务只是单纯地提供服务而没有任何安全相关逻辑。

    这套解决方案中相关服务的划分如下:

    • micro-oauth2-gateway:网关服务,负责请求转发和鉴权功能,整合Spring Security+Oauth2;
    • micro-oauth2-auth:认证服务,负责对登录用户进行认证,整合Spring Security+Oauth2;
    • micro-oauth2-api:API服务,受网关服务的保护,用户鉴权通过后可以访问该服务,不整合Spring Security+Oauth2。

    升级注意点

    • 这里项目的依赖版本都升级了,支持SpringBoot 2.7.0和最新版的Spring Cloud;
    <properties>    <spring-boot.version>2.7.0</spring-boot.version>    <spring-cloud.version>2021.0.3</spring-cloud.version>    <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version></properties>
    
    • 这里不得不吐槽下Spring Cloud的版本号,之前名字采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序,后来又改成了年份,现在又添加了之前废弃的地铁站名字作为别名,真是让人迷惑;
    image.png
    • SpringBoot 2.7.0版本中使用Maven插件需要添加版本号;
    <plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <version>${spring-boot.version}</version></plugin>
    
    • 最新版本的Spring Cloud已经放弃使用Ribbon来做负载均衡了,转而使用LoadBalancer,所以网关服务micro-oauth2-gateway中还需添加LoadBalancer依赖;
    <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
    
    • 如果不添加LoadBalancer依赖,从网关调用任意服务会返回Service Unavailable错误信息;
    {    "timestamp": "2022-06-28T02:36:31.680+00:00",    "path": "/auth/oauth/token",    "status": 503,    "error": "Service Unavailable",    "requestId": "c480cefa-1"}
    
    • micro-oauth2-auth认证服务需要升级版本,注意使用的JWT库也要同步升级;
    <dependencies>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-oauth2</artifactId>        <version>2.2.5.RELEASE</version>    </dependency>    <dependency>        <groupId>com.nimbusds</groupId>        <artifactId>nimbus-jose-jwt</artifactId>        <version>9.23</version>    </dependency></dependencies>
    
    image.png
    • 下载完成后解压到指定目录即可,使用如下命令启动Nacos;
    startup.cmd -m standalone
    
    image.png

    使用

    本文仅作为微服务权限终极解决方案,Spring Cloud Gateway + Oauth2 实现统一认证和鉴权! 升级版本的补充,具体代码实现可以参考该文,下面演示下该解决方案中的统一认证和鉴权功能。

    • 首先需要启动Nacos和Redis服务,然后依次启动micro-oauth2-auth、micro-oauth2-gateway及micro-oauth2-api服务,启动完成后Nacos服务列表显示如下;
    image.png image.png image.png
    • 带JWT令牌访问受保护的API接口,注意请求头Authorization添加Bearer前缀,可以正常访问;


      image.png
    image.png image.png

    总结

    在微服务系统中实现权限功能时,我们不应该把重复的权限校验功能集成到每个独立的API服务中去,而应该在网关做统一处理,然后通过认证中心去统一认证,这样才是优雅微服务权限解决方案!

    项目源码地址

    https://github.com/macrozheng/springcloud-learning/tree/master/micro-oauth2

    来源:
    https://mp.weixin.qq.com/s/x7yc0B_yW9PEm_Dk5XiiuQ

    相关文章

      网友评论

        本文标题:支持Nacos 2.1.0!微服务权限终极解决方案,Spring

        本文链接:https://www.haomeiwen.com/subject/sdrxvrtx.html