初学Django:使用Python官方的hmac库生成JWT

最近在自学Django,然后就了解到有一种叫做JWT的无状态授权方式,觉得挺合适,就稍稍了解了一下。

首先,JWT的官网应该是 jwt.io,这个网站的首页上有一个 JWT Debugger,可以在线编码/解码JWT。

具体JWT的格式我就不在这里说了,可以看上面的官网或者自行搜索。

使用 hmac-sha256 来编码官网上给出的实例的 python 代码如下:

[python]

import hmac
import hashlib
import base64

str0 = b'{"alg":"HS256","typ":"JWT"}'
str1 = b'{"sub":"1234567890","name":"John Doe","admin":true}'

eString0 = base64.b64encode(str0)
print(str(eString0))
eString1 = base64.b64encode(str1)
print(str(eString1))

msg = eString0 + b'.' + eString1
print(msg)

# key = base64.b64encode(b'secret') # Can chose whether encode key to base64 or not.
key = b'secret'
h = hmac.new(key=key, msg=msg, digestmod=hashlib.sha256)
print(h.digest())

# This is the 'Signature'
d = base64.b64encode(h.digest())
print(d)

总的来说代码是挺简单的,上面代码编译出来后的 base64 签名结尾会比官网上给出的实例签名多出一个一个 ‘=’,这时 base64 的编码特性决定的,不过需要注意的是,python 的 base64 库比较挑。比如上面的代码中,如果把最后的=去掉后,会无法使用 base64 解码。不过总的来说不影响使用。


上述的代码中,生成的不是 url safe 的 base64 字符串,在网络服务中使用,建议使用:

base64.urlsafe_b64encode(string)
base64.urlsafe_b64decode(bytes)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值