前后端鉴权之JWT、手机App的Token

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/111313034

之前分享过 session-cookie 的认证,这次来分享下 我遇到的Token认证。

这是我写的 接口测试的category ,有兴趣 可以看看;

个人博客:https://blog.csdn.net/zyooooxie

JSON Web Token

最近测试某个需求,这个系统鉴权用到了JWT+Session;这儿来说下 JWT。

说下认证流程:

  1. 客户端使用 用户名和密码 发送post请求;

在这里插入图片描述

  1. 服务端收到请求,去验证用户名与密码。验证成功后,服务端使用私钥 创建一个jwt,再把这个jwt发送给客户端;

在这里插入图片描述

  1. 客户端收到 这个jwt后,把它存储起来,放在 Cookie 里。后续 客户端每次向服务端请求资源的时候 带着这个jwt;

在这里插入图片描述

  1. 服务端收到请求,然后去验证 这个jwt的合法性;如果验证成功,就向客户端返回请求的数据 ,如果不成功 返回401错误码,鉴权失败。

在这里插入图片描述

实战

1. requests.session()


gl_login_url = 'zyooooxie/api/user/login/'
gl_project_url = 'zyooooxie/api/project/'


def session_login_project():
    print('发起 登录请求')
    s = requests.session()
    res = s.post(url=gl_login_url, data={'username': 'zyooooxie', 'password': 'csdn'})

    print('看下 响应头:')
    print(res.headers)
    print(res.headers['Set-Cookie'])

    print('看下 请求头:')
    req = res.request
    print(req.headers)

    print('发起 第二个请求')

    res_0 = s.get(url=gl_project_url)
    print('第二个请求,响应头:')
    print(res_0.headers)
    req_0 = res_0.request
    print('第二个请求,请求头:')
    print(req_0.headers)

在这里插入图片描述

2. get()参数cookies 传 RequestsCookieJar()

使用 第一步 方法执行后的 jwt和SESSION值


def cookie_project():
    jar = RequestsCookieJar()
    jar.set('jwt', 'zyooooxie')
    jar.set('LANDSAT:SESSION:', 'zyooooxie')

    res_1 = requests.get(url=gl_project_url, cookies=jar)
    print('单独 请求,响应头:')
    print(res_1.headers)
    req_1 = res_1.request
    print('单独 请求,请求头:')
    print(req_1.headers)

在这里插入图片描述

3. 正则提取 登录接口的jwt和SESSION值, get()参数cookies 传 RequestsCookieJar()


def cookie_login_project():
    res = requests.post(url=gl_login_url, data={'username': 'zyooooxie', 'password': 'csdn'})
    print('第一次 登录请求,响应头:')
    print(res.headers)
    sc = res.headers['Set-Cookie']
    print(sc, type(sc))

    jwt_re = r'jwt=(\w.+?);'
    jwt_str = re.search(jwt_re, sc).group(1)
    session_re = r'LANDSAT:SESSION:=(\w.+?);'
    session_str = re.search(session_re, sc).group(1)

    req = res.request
    print('第一次 登录请求,请求头', req.headers)

    jar = RequestsCookieJar()
    jar.set('jwt', jwt_str)
    jar.set('LANDSAT:SESSION:', session_str)

    res_2 = requests.get(url=gl_project_url, cookies=jar)
    print('请求,响应头:')
    print(res_2.headers)
    req_2 = res_2.request
    print('请求,请求头:')
    print(req_2.headers)

在这里插入图片描述

这一次,打印的:

在这里插入图片描述

4. dict_from_cookiejar处理 响应的cookies,拿到登录接口的jwt和SESSION值, get()参数cookies 传 RequestsCookieJar()


def dict_cookie_login_project():
    res = requests.post(url=gl_login_url, data={'username': 'zyooooxie', 'password': 'csdn'})
    print('第1次 登录请求,响应头:')
    res_cookie = res.cookies
    print(res_cookie)

    cookie_dict = dict_from_cookiejar(res_cookie)
    print(cookie_dict)

    # # 下面2种 都可以
    # jar = RequestsCookieJar()
    # jar.set('jwt', cookie_dict['jwt'])
    # jar.set('LANDSAT:SESSION:', cookie_dict['LANDSAT:SESSION:'])
    # res_3 = requests.get(url=gl_project_url, cookies=jar)

    res_3 = requests.get(url=gl_project_url, cookies=cookie_dict)

    print('第2次 请求,响应头:')
    print(res_3.headers)
    req_3 = res_3.request
    print('第2次 请求,请求头:')
    print(req_3.headers)


在这里插入图片描述

JWT解码后 PAYLOAD出现秘密数据

JWT 不加密的情况下,不能将秘密数据写入 JWT;
但我还真碰上了;

在这里插入图片描述

某手机App的Token

先说下流程:

  1. App端发起登录请求,发送加密的用户名和密码到服务器;
  2. 服务器验证用户名和密码,如果成功,生成一份Token【会有一个有效期】,存储到服务器中,同时将此Token返回给App端;
  3. App端将此Token保存到本地,以后App请求时,凡是需要验证的地方都要带上该Token,然后服务器端验证Token和有效期,成功返回所需要的结果,失败返回错误信息,重新登录。

拿我之前公司的App来分享下:

在这里插入图片描述

在这里插入图片描述

翻找出来 以前的代码 :

在这里插入图片描述

我现在公司 测过 某App,走得是 比较传统的 cookie + session, 我把这部分 加到 session-cookie 的认证

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值