接口跳转时设置token

接口跳转时设置token,第1张

接口跳转时,可以将token作为url中的一个参数传递,以便其他页面能够获取到该token,从而识别用户和授权信息。常见的做法是将token加密后传递,在接收方进行解密处理。例如,假设要跳转到目标页面时,需要在url中传递token参数,可以按照以下步骤进行处理:1 在登录时生成一个token,在服务器端保存该token和用户信息的对应关系。2 在跳转时将token加密后添加到url的参数中。3 在目标页面中获取url中的token参数,并通过解密算法获取用户信息。可以选择将用户信息存储到本地或从服务器端获取。注意,为了保证token的安全性,需要采取一定的安全措施,如限制token的时效性、设置访问次数限制、加密token等,以防止token泄露或被恶意利用。在实现过程中,建议参考相关的安全规范和最佳实践。

常见的鉴权方式有两种,一种是基于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 ,验证逻辑同验权流程。

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

Token(令牌):通常是一串比特值或者字符串,用来作为访问资源的记号。Token中含有可访问资源的范围和有效时间。openstack服务通过token来调用资源。

方法一:

使用openstack命令获取

(id的值就是token)

此token值可直接使用

方法二:

通过api的方式

(X-Subject-Token的值是token)

使用这个token查看用户列表:

提示没有权限。(意料之中)

查看admin用户:

重新获取一个token(多了好多东西):

验证一下(还是用户列表)(通过api方式获取的token值需要明确用户角色):

附:

①openstack任何命令加上参数”--debug“即可看到当前命令使用的api端点。。。

例如:

②json格式的-d参数:

问题:登陆成功之后,连接就断开,服务器如何判断当前用户的的登录状态

一般,在开发中,利用token值来的判断用户的登录状态

token值:登录令牌,是标识用户信息的唯一标识符,是一个长字符串,不会有两个相同的token值,

用户登录成功之后,在服务器端就会生成一个token值,然后这个token值就会返回给客户端,同时在服务器也会保存这个token值

客户端获取到服务器屌token值之后,会保存在本地(磁盘/沙盒:"永久化"保存),

客户端发送新的网络请求:

{

1请求不需要用户信息,(浏览商品),服务器不需要判断用户是否登录,

2发送的请求需要用户信息(购买商品/添加到购物车(JD需要,淘宝不需要)),服务器需要判断用户是否登录成功过,

将token值作为判断用户信息的标准发送给服务器,服务器通过对比token值来确定用户是否需要再次登录,

token值改变

{

1用户信息已经改变(密码改变)

2token值失效(token值是可以设置有效时间的)

{

1实时要求比较高(安全):银行支付类,失效时间比较短,15min

2为了保留用户/简化登录流程,失效时间比较长,1Year

}

}

服务器和本地保存的token值不相同,

{

1如果token值不同:需要再次登录,生成新的token值

2token值失效了,再次登录,

}

}

服务器如何判断用户的"唯一性"登录通过token值

{

设置token值失效,

每次登录成功之后都会在服务器生成新的token值,原来的token值就失效了

}

客户端需要做的事情:就是将token值作为一个参数传递给服务器

{

1将token值作为一个普通参数拼接在url后面或者封装在请求体中,-------->手动添加token值参数

2将token值保存在cookie中,自动发送给服务器,------>不需要程序员管理,

}

哪些网络请求需要token值

{

移动互联网/大数据/HTML5

//手机用户信息------>数据挖掘

//通过参数将用户数据告诉服务器!

}

以上就是关于接口跳转时设置token全部的内容,包括:接口跳转时设置token、基于token机制鉴权架构、openstack获取token值的两种方式 2019-05-15等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存