zoukankan      html  css  js  c++  java
  • Python 实现 JWT 生成

    Python 实现 JWT 生成

    JWT 简介:https://www.jianshu.com/p/576dbf44b2ae

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON 的开放标准((RFC 7519)。该token 被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token 也可直接被用于认证,也可被加密。

    JWT 由三段信息构成:Header, Payload, Signature

    Header 通常声明文件类型、加密算法

    Payload 以JSON 形式记录要传输的数据

    Signature 为签名,用来做验证

    base64UrlEncode

    jwt.io 生成jwt 时会发现签名中使用了一种base64UrlEncode 的方法,这个方法的基本功能如下:

    1. 输入一个utf-8编码的字符串s1
    2. 将字符串s1使用base64编码得到字符串s2
    3. 如果s2末尾有等号,去除末尾的所有等号
    4. 如果s2中含有加号(+),将所有加号替换为减号(-)
    5. 如果s2中含有斜杠(/),将所有斜杠替换为下划线(_)

    下面的b64url函数实现了上述过程

    实现一个HS256 加密的 JWT 生成

    # -*- coding: utf-8 -*-
    
    import hmac
    import base64
    from hashlib import sha256
    from urllib import parse as urlp
    
    def b64url(str1):
        if type(str1) == str:
            return str(base64.b64encode(str1.encode('utf-8')), encoding="utf-8").strip('=').replace('+','-').replace('/','_')
        elif type(str1) == bytes:
            return str(base64.b64encode(str1), encoding="utf-8").strip('=').replace('+','-').replace('/','_')
        else:
            raise TypeError("The type of given argument must be string or bytes")
    
    # Enter Your Infomation Here ...
    header = b64url('{"alg":"HS256","typ":"JWT"}')
    payload = b64url('{"sub":"1234567890","name":"John Doe","iat":1516239022}')
    secret = 'happynewyear'.encode('utf-8')
    # ###
    
    sig = b64url(hmac.new(
        secret, (header+'.'+payload).encode('utf-8'), digestmod=sha256
    ).digest())
    
    jwt = header+'.'+payload+'.'+sig
    print(jwt)
    
  • 相关阅读:
    @@IDENTITY 存储过程
    ASP.NET的Cookie和Session
    数据格式设置表达式
    DataTable类(MSDN)
    用静态变量代替appliction
    C cgi url 编码解码问题
    C#视频头操作
    c#网页抓取
    c语言字符串分隔
    CGI c 上传文件
  • 原文地址:https://www.cnblogs.com/soowin/p/14095180.html
Copyright © 2011-2022 走看看