解决方案:微服务网关实现简单鉴权

本文详细介绍了在微服务架构中如何利用JWT进行简单鉴权,包括JWT的工作原理、JJWT工具的使用、创建和验证Token的过程,以及如何在网关中实现Token的校验,确保权限控制。

解决方案:微服务网关实现简单鉴权


关键词

  • JWT(xxxxx.yyyyy.zzzzz)
  • JJWT工具
  • 网关过滤器解析TOKEN

在网关系统中比较适合进行权限校验
在这里插入图片描述

在这里插入图片描述

一、微服务架构下统一认证思路

  • 基于Session的认证方式
    在分布式的环境下,基于session的认证会出现一个问题,每个应用服务都需要在session中存储用户身份信息,通过负载均衡将本地的请求分配到另一个应用服务需要将session信息带过去,否则会重新认证。我们可以使用Session共享、Session黏贴等方案。

    Session方案也有缺点,比如基于cookie,移动端不能有效使用等

  • 基于Token的认证方式
    优点:服务端不用存储认证数据;易维护扩展性强;客户端可以把token 存在任意地方;可以实现web和app统一认证机制

    缺点:token由于自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占带宽。另外,token的签名验签操作也会给cpu带来额外的处理负担

二、基于Token的认证方式(JWT)

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

一个JWT实际上就是一个字符串,它由三部分组成,头部载荷签名。每部分中间使用点(.)分隔,比如:xxxxx.yyyyy.zzzzz

2.1 头部(Header):

作用:在头部指明了签名算法

例如:{“typ”:“JWT”,“alg”:“HS256”}

将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分

2.2 载荷(playload):

作用:载荷就是存放有效信息的地方

例如:{“sub”:“1234567890”,“name”:“John Doe”,“admin”:true}

将其进行base64加密,得到Jwt的第二部分

2.3 签名(signature):

作用:jwt的第三部分是一个签证信息,这个签证信息由三部分组成

  • header (base64后的)
  • payload (base64后的)
  • secret

例如:HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload)+ secret )

三、使用JJWT工具 实现 token的签发与验证

JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。

3.1 创建token

1)在项目中的pom.xml中添加依赖

<dependencies>
        <!--JJWT依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿城大饼

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值