如何生成以及校验token

这篇具有很好参考价值的文章主要介绍了如何生成以及校验token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1️⃣ What is token?        

2️⃣ Why do we use token?

3️⃣ token组成(Composition of token)

4️⃣ 校验token(Verify token)

5️⃣ 实操:

生成token(Generate token)

校验token(Verificationtoken) 


1️⃣ What is token?        

token是令牌的意思,作用就像“通关令牌”一样,持有token的请求会被“放行”,不持有token的请求可以被拦截(可以设置白名单使不被拦截,例如登陆请求)。

token是由服务端创建的一串字符串,登陆成功后发送给前端存储在浏览器或本地中,以后每次发送请求都携带上。

1. 使用拦截器在请求发出前在请求头中添加上 token。

如何生成以及校验token

2. 将 token 存储在浏览器的 cookies 中,符合一些条件每次请求都会自动带上 token。

如何生成以及校验token

2️⃣ Why do we use token?

在前后端分离的web项目中,HTTP是无状态协议,即使使用账号密码登陆,后端仍然无法分辨是谁发出的请求,要么后端不需要确认请求者的身份,要么每次请求都携带身份信息供后端确认。

显然第一种方法对软件的安全会造成极大的威胁,那么第二种方法就被改善成了token,token就是加密了的用户身份信息。

3️⃣ token组成(Composition of token)

以jwt(java web token)为例,下图介绍了详细介绍了token的组成。

 如何生成以及校验token

4️⃣ 校验token(Verify token)

这里只说最基础的校验。

token的加密一般是可逆的,后端接收到token中,还可以根据加密的算法再进行解密,以获取荷载中的用户信息,因此荷载中不能放置密码等信息。

第三部分由于加入了自己制定的秘钥(秘钥一般保存在后端代码中),解密成功后会与前两部分和保存的秘钥进行对比,对比成功了才算token验证通过。经过这样的双重保障,这三部分每一部分被篡改都会被发现。

校验流程:

如何生成以及校验token

5️⃣ 实操:

生成token(Generate token)

以生成jwt为例子,代码如下:

        <!-- 引入jwt -->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.8.2</version>
        </dependency>

校验token(Verificationtoken) 

@Slf4j
public class JwtUtil {
    /**
     * 使用固定的解密秘钥
     */
    private static final String SECRET = TOKEN_SECRET;

    /**
     * @version: V1.0
     * @description: 生成token并验证token并解密token中的信息
     * @param:  userInfo 用户手机号和用户Id
     * @return: java.lang.String 返回token
     **/
    public static String getToken(UserInfoEntity userInfo) {
        try{
            //用秘钥生成签名
            Algorithm algorithm = Algorithm.HMAC256(SECRET);
            //默认头部+载荷(手机号/id)+签名=jwt
            String jwtToken= JWT.create()
                    .withClaim("userPhone", userInfo.getUserPhone())
                    .withClaim("userId", userInfo.getUserId())
                    .sign(algorithm);
            log.info("用户{}的token生成成功:{}",userInfo.getUserId(),jwtToken);
            return jwtToken;
        }catch (Exception e){
            log.error("用户{}的token生成异常:{}",userInfo.getUserId(),e);
            return null;
        }
    }

    /**
     * @version: V1.0
     * @description: 校验token是否正确
     * @param:  token
     * @param: userPhone
     * @return: UserInfoEntity token中的用户信息(姓名/id)
     **/
    public static UserInfoEntity verify(String token) {
        try {
            // 根据用户信息userInfo生成JWT效验器
            Algorithm algorithm = Algorithm.HMAC256(SECRET);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            // 效验TOKEN
            verifier.verify(token);
            log.info("token:{}校验成功成功",token);
            //返回token内容
            return getTokenInfo(token);
        } catch (Exception exception) {
            log.error("token校验异常:{}",exception);
            return null;
        }
    }

    /**
     * @version: V1.0
     * @Title: getUsername
     * @description: 从Token中解密获得Token中的用户信息
     * @param:  token
     * @return: UserInfoEntity token中的用户信息(姓名/id)
     **/
    private static UserInfoEntity getTokenInfo(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            UserInfoEntity userInfo=new UserInfoEntity();
            userInfo.setUserPhone(jwt.getClaim("userPhone").asString());
            userInfo.setUserId(jwt.getClaim("userId").asString());
            log.info("用户{}从token获取用户信息成功",userInfo.getUserId());
            return userInfo;
        } catch (JWTDecodeException e) {
            log.error("从token:{}获取用户信息异常:{}",token,e);
            return null;
        }
    }
}

总结:

在实际应用中,还应考虑安全性措施,如使用安全的随机数生成器生成密钥、定期更换密钥、使用 HTTPS 等。

Token 的生成和校验机制为应用程序提供了一种安全的身份验证和授权方式,可以用于用户认证、API 访问控制等场景。正确实现和使用 Token 机制可以提高应用程序的安全性和用户体验。文章来源地址https://www.toymoban.com/news/detail-428362.html

到了这里,关于如何生成以及校验token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络教程】如何创建/添加钉钉机器人以及如何获取机器人的Token/Secret

    这里以PC端的操作为例,按照如下操作进行 访问 钉钉开放平台 选择 机器人 选项卡,点击右上角的 创建应用 ,这里会有一个弹窗,我这里选择的是 继续使用旧版 ,如图 按照要求填写相关信息创建自己的机器人,如图 创建成功后,点击创建成功的机器人进入设置界面,如图

    2024年02月12日
    浏览(69)
  • 【计算机硬件】1、计算机的硬件组成、校验码

    CPU主要是由运算器、控制器、寄存器组和内部总线等部件组成 1、程序控制 通过执行指令来控制程序的执行顺序 2、操作功能 一条指令的实现需要若干操作信号配合,控制相应的部件完成相对应的操作 3、时间控制 对各种操作进行时间上的控制,指令执行的过程中操作信号出

    2024年01月19日
    浏览(51)
  • JWT主动校验Token是否过期

    JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP 协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个 request 请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁

    2024年02月09日
    浏览(68)
  • 权限校验中的“双token”方案

    注:refresh_token的过期时间一般比access_token的过期时间长一倍,甚至更长 在以前,我们设计单token的方案进行token过期刷新,一旦这个token泄露,不法分子就可以无限进行token刷新,从而造成无法挽回的后果。

    2024年02月11日
    浏览(31)
  • 毕业论文如何生成目录?人工智能毕业论文选题

    AIPaperPass是一款专为AI论文写作而设计的创新平台。作为一名研究人员或学生,写作一篇高质量的AI论文可能是一项繁琐而耗时的任务。然而,借助AIPaperPass论文写作生成器,您可以轻松地生成高质量的AI论文,节省宝贵的时间和精力。 ——应用优点—— 1、高效论文生成 AIPa

    2024年02月20日
    浏览(40)
  • 计算机组成原理实验logisim(三)之偶校验编码与检错

    实验三的前两个实验: 国标码转区位码 汉字GB2312编码 在很多地方都找得到,我就不多说。 附上我使用过的连接:https://blog.csdn.net/gemingshun/article/details/106784595 其中我们老师提供的关于汉字字符集编码查询;中文字符集编码:GB2312、BIG5、GBK、GB18030、Unicode  的网址:https://w

    2024年04月13日
    浏览(49)
  • SSH免密登录以及没有.ssh目录如何办

    如果登录后,发现没有.ssh文件夹,执行命令,点击yes。可以生成.ssh 文件夹。 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

    2024年02月15日
    浏览(40)
  • ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则

    首先,验证码扩展库是需要view扩展的 安装完成后,接着安装验证码扩展库 视图使用的说明: 页面使用的话,两种方式 侧重说明一下,使用第二种方式 我们只需要在控制器中提供一个方法,用于验证码的生成,然后前端将img的src属性修改为对应的方法路径即可 属性说明:

    2024年02月10日
    浏览(43)
  • django校验token自定义中间件

    确保将 ‘path.to.TokenValidationMiddleware’ 替换为你中间件的实际路径。中间件会按照在列表中的顺序顺序执行,所以确保它在其他可能影响请求处理的中间件之前或之后执行,具体取决于你的需求。 这是一个简单的例子,实际上,你可能需要使用更复杂的 Token 校验逻辑,例如使

    2024年01月21日
    浏览(46)
  • 小程序消息推送配置 Token校验失败,请检查确认

    一、小程序消息推送配置 Token校验失败,请检查确认 添加配置失败,原因 只要是没有echostr原样返回,就会报错; 注意,返回的事echostr的内容,而不是key=value格式 示例如下: 二、小程序消息推送配置 校验强调 1.保证自己的代码没有bug 2. 微信 服务器校验请求 请求参数:请

    2023年04月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包