zoukankan      html  css  js  c++  java
  • 微服务下的用户登录权限校验解决方案

    微服务下的用户登录权限校验解决方案

    1)方案一:单机tomcat应用登录校验

    session保存在浏览器和应用服务器会话之间,用户登录成功,服务端会保存一个session,当然会给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId

    2)方案二:分布式应用中session共享

    真实的应用不可能单节点部署,所以就有多个结点登录session共享的问题需要解决。

    • tomcat支持session共享,但是有广播风暴,用户量大的时候,占用资源就很严重,不推荐

    • 使用redis存储token:

      服务端使用UUID生成随机64位或128为token,放入redis中,然后返回给客户端并存储在cookie中,用户每次访问都携带此token,服务端去redis中检验是否有此用户即可

    3)方案三:JWT(JSON Wen Token)

    JWT是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。JWT可以使用HMAC算法或者是RSA的公钥密钥进行签名。简单来说,就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息。

    • 优点:

      1)生产的token可以 包含基本信息,比如id、用户昵称、头像等信息,避免再次查库

      2)存储在客户端,不占用服务端内存资源

    • 缺点:token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,如用户权限,密码等。

    1.JWT格式组成:头部、负载、签名

    header+payload+signature

    • 头部:主要是描述签名算法
    • 负载:主要描述加密对象的信息,如用户的id,也可以加些规范里面的东西,如iss签发者,exp过期时间,sub面向的用户
    • 签名:主要是把前面两部分进行加密,防止别人拿到token进行base解密后篡改token

    2.JWT客户端存储

    可以存储在cookie,localstorage和sessionStorage里面

    3.JWT校验实战封装通用方法

    1)加入依赖

    <!-- JWT相关依赖 -->
    <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.0</version>
    </dependency>
    
  • 相关阅读:
    变长参数表
    以二进制方式输出数字在内存中的存储形式
    asp.net mvc controller 获取数据
    asp.net mvc 3.0 新特性之 Model
    一个实体对象不能由多个 IEntityChangeTracker 实例引用
    iis6.0运行asp请求资源正在使用中
    view的使用
    asp.net mvc RenderAction 和RenderPartial用法
    今天
    当下的力量
  • 原文地址:https://www.cnblogs.com/zxfei/p/11716822.html
Copyright © 2011-2022 走看看