← 返回题库
中级

手写JWT验证与解析

未完成
中级参考 代码结构已给出,请填写 ____ 处
def solve():
    from pyodide.http import open_url
    from io import StringIO
    tokens_csv = open_url(____).read()
    import base64, hmac, hashlib, json
    SECRET = '____'
    def b64url_decode(____):
        pad = ____ - len(____) % ____
        if pad != ____: s += '____' * pad
        return base64.urlsafe_b64decode(____)
    def b64url(____):
        if isinstance(____): s = s.encode()
        return base64.urlsafe_b64encode(____).rstrip(____).decode()
    def verify_jwt(____):
        try:
            h, p, s = token.split(____)
        except ValueError:
            return False, None, '____'
        expected_sig = b64url(hmac.new(secret.encode(), f'____'.encode(), hashlib.sha256).digest())
        if expected_sig != s:
            return False, None, '____'
        payload = json.loads(b64url_decode(____))
        if payload.get(____) < now:
            return False, payload, '____'
        return True, payload, '____'
    def make_jwt(____):
        iat = ____
        h = b64url(json.dumps(____))
        p = b64url(json.dumps(____))
        sig = b64url(hmac.new(SECRET.encode(), f'____'.encode(), hashlib.sha256).digest())
        return f'____'
    tokens = [make_jwt(____), make_jwt(____), make_jwt(____)+'____', make_jwt(____)]
    for t in tokens:
        ok, payload, msg = verify_jwt(____)
        sub = payload.get(____) if payload else None
        print(____)

示例

输入
solve()
期望输出
sub=1: valid=True, msg=ok
sub=2: valid=False, msg=token expired
sub=None: valid=False, msg=invalid signature
sub=4: valid=True, msg=ok
Python 代码 🔒 登录后使用
🔒

登录后即可练习

注册免费账号,在浏览器中直接运行 Python 代码