zoukankan      html  css  js  c++  java
  • JWT

    一. jwt实现过程

    1 用户提交用户名和密码给服务端,如果登录成功,使用jwt创建一个token,并给用户返回

    eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InpjYyIsImV4cCI6MTU5NDczODg5MX0.OCG4mUhs_yXIkxtxvG9MWJWjpbvnSGDcqMVtpsn_0mo

    2 构建三段字符串之间的关系

    # 第一段字符串 headers内部包含了算法 和 token类型。
        流程: 先将python类型对象装换成json格式字符串, 然后做base64加密
        headers = {
            'typ': 'jwt',
            'alg': 'HS256',
        }    
    
        
    # 第二段字符串payload,自定义的值
        流程: 先将python类型对象装换成json格式字符串,然后做base64加密
        payload = {
            'user_id': user.pk,
            'username': username,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=300),  # 超时时间
        }
    # 第三段字符串 第一步:把1,2部分base64加密过后的结果进行拼接加密 第二步:对前2部分的加密结果进行hs256加密 + 加盐 第三步:对hs256加密后的密文在进行base64url加密再拼接到前1, 2部分base64格式的末尾作为sign.

    3 以后用户访问时,需要携带token,后端需要对token校验

    二 校验JWT

    1 获取token

    2 对token进行切割, 获取第二段内容进行base64解密,获取payload信息, 检查超时时间是否超时

    3 由于第三部分的字符串不能反解,把第一和第二段在进行hs256加密

    把1,2部分base64的密文拼接加密
    对前2部分加密进行hs256加密+加盐得到密文
    再将密文机进行base64加密, 与前两段的base64d格式的密文进行对比, 如果相等,表示token没有修改通过.
  • 相关阅读:
    Java集合框架--List去重
    solr管理集合
    关于unix环境高级编程、Linux程序设计两部书浅谈
    ubuntu17.10安装lnmp安装包的核心问题-gcc版本、g++版本
    手机谷歌浏览器简洁处理方法
    Ubuntu当状态栏网络图标隐藏的解决方法汇总
    Ubuntu创建WiFi:16.0.4
    关于virtual box 虚拟机使用
    关于json转义中文
    xp 允许序列号
  • 原文地址:https://www.cnblogs.com/xupengjun/p/14266533.html
Copyright © 2011-2022 走看看