java调用外部接口获取的token怎么处理

java调用外部接口获取的token怎么处理,第1张

处理方法如下。

1、如果使用session,首先如果是单例服务可以使用,如果是分布式的得先解决分布式session问题,然后看session处理token,后台登录成功以后获取session,然后将登录的信息缓存后放到session中,以后每次请求不需要携带token,后台可以获取到session并获取到session,如果有自动刷新,后台校验token失效后可再拿refreshtoken刷新access_token,刷新后的token重新缓存,并重新放入session中,放缓存是因为刷新token需要使用到。

2、不使用session,后台生成token并缓存,将token和登录信息给前端返回,前端获取token并存储到cookie或者localstage中,以后的请求头中都设置从cookie中获取的token,后端截取token做校验。

magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为>

前言

有些登录不是用cookie来验证的,是用token参数来判断是否登录。

token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已;另外一种是在url请求参数里,这种更直观。

一、登录返回token

1如下图的这个登录,无cookies

2但是登录成功后有返回token

二、请求头带token

1登录成功后继续 *** 作其它页面,发现post请求的请求头,都会带token参数

2这种请求其实比cookie更简单,直接把登录后的token放到头部就行

三、token关联

1用脚本实现登录,获取token参数,获取后传参到请求头就可以了

2如果登录有验证码,前面的脚本登录步骤就省略了,自己手动登录后获取token

import requests

header = { # 登录抓包获取的头部

"User-Agent": "Mozilla/50 (Windows NT 100; WOW64; rv:440) Gecko/20100101 Firefox/440",

"Accept": " / ",

"Accept-Language": "zh-CN,zh;q=08,en-US;q=05,en;q=03",

"Accept-Encoding": "gzip, deflate",

"Content-Type": "application/x->

常见的鉴权方式有两种,一种是基于session,另一种是基于token方式的鉴权,我们来浅谈一下两种 鉴权方式的区别。

session

token

业界常用的授权标准有两种,一种是使用auth2,这种方式更适合于类似第三方授权登录,比如微信、微博、QQ信任登录业务。另一种是oauth,即第三方无需知道用户和密码就可以申请获得该资源的授权,更适用于对用户的权限校验并分配访问权限,比如常见的登录后分配可见资源(按钮、菜单等)类型网站。

Javashop电商系统 采用的是oauth方式的鉴权标准。我们以系统的应用为例来介绍oauth的方案。

1 登录

服务端校验密码,成功后返回access_token和refresh_token,客户端记录上述token。

2 访问API

在访问API之前解析access_token,并且查看是否过期,如果不过 期则请求API,如果过期,则要刷新令牌,在请求API。

3 刷新token

携带有效期的refresh_token换回有效token,如果refresh_token过期,则需要用户重新登录。

4 注销

请求注销api,服务器端和客户端应同时删除token的存储。

1 客户端请求API

携带access_token信息,如果生成环境不会直接携带access_token,会使用加密后的签名校验。祥见以下防重放机制。

2 获取token

根据环境不同而有不同的获取token方式。

3 解析token

通过JWT工具将token解析。

4 由redis读取token

根据uid拼接key读取access_token, 如果不存在这个用户的token说明已经登出。

5 验证token

判断次token是否属于此uid,判断token是否过期,如果过期则进行以下刷新token的流程。

6 注入权限

如果token验证成功,根据user信息生成权限注入到spring安全上下文中。

1 客户端请求API

携带refresh_token,如果是生产环境不会直接携带refresh_token信息,详见以下防重放攻击。

2 获取token

根据环境不同而有不同的获取token方式。

3 解析token

通过JWT工具将token解析。

4 token读取

根据uid拼接key读取出access_token,如果不存在这个用户的token说明用户已经登出。

5 验证token

判断此token是否属于此uid,判断token是否已经过期,如果过期,则返回refresh_token过期错误,此时用户需要重新登录。

6 刷新token

如果refresh_token 验证成功,则重新生成access_token和refresh_token,上述有效期以当前时间向后计算,替换此用户在redis中的token,并将token返回给客户端。

一、 参数的读取

1 在生产环境时,不能直接传递token,而是要传递签名数据,服务器端验签后由Redis中获取签名。

2 如果是非生产环境,直接由header中读取token。

二、 生产环境传递如下参数

memberid (用户id)

nonce(随机字串,6位)

timestamp(当前时间戳,到秒)

sign= md5( uid+ nonce + timestamp +token )

三、 验证逻辑

1 验证时间戳

判断时间戳是否起过60s,大于60s则判别为重放功击。

2 验证nonce

首先验证nonce在 reids中是否存在,如果存在,则判别为重放功击,否则将nonce记录在redis中(key为:"nonce"+uid+"_"+nonce),失效时间为60s。

3 验证sign

md5( uid+ nonce + timestamp +token ) 验证是签名是否通过。

4 验证token

通过uid拿到token ,验证逻辑同验权流程。

当然在不同的业务场景下实现方案是多种多样的,仅以此方案抛转引玉,供大家参考。

以上就是关于java调用外部接口获取的token怎么处理全部的内容,包括:java调用外部接口获取的token怎么处理、magic-api 快速接口开发、python接口自动化之token登录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9542881.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存