不叫AccessToken和Authorization也可以.
我给你简单讲下这两个东西是为了做什么吧.
首先这一般用在RESTFUL风格的无状态通讯中.啥意思呢?就是说不用Session这种传统的标记,来表达"用户是谁".用户每一次的请求访问都没有这个session状态的时候.就叫做无状态.
那么没有session之后,服务器怎么知道访问者到底是谁,是哪个账号呢?
那么就需要约定出来一个临时通行证token.
用户在登录页,用账号密码进行登录.然后服务器临时生成一个token或者AccessToken或者Authorization再或者lalalademaxiya,随便你叫什么名字,你只需要知道这个东西就是一个临时的身份z明就可以了.
然后用户后续的请求访问,就带上这个临时证明,(不能每次访问都传账号密码,太不安全了,所以采用临时身份z).
服务器收到请求后,从请求头里面拿出token,或者你这个AccessToken,都可以,看你叫什么名字.再从自己的内存队列中查询,是否包含这个token,以及这个token对应哪个User.在决定这个用户能做什么,后续业务怎么进行.
(一般这种情况我们放在拦截器里面做,拦截器拦截所有http请求,然后取出里面的token,username等鉴权信息,去缓存查看,是不是自己的用户,是就放行,不是就打回去)
不知道我说清楚没有.
总之这个东西就是拿来做临时身份z明的.用户登录成功,你随机生成一个不重复的字符串乱码token,然后将token:user作为键值对存入在线缓存.
然后前端发请求时,在Header里面加上token,后端收到,去在线缓存里找,是否有token对应的user.没有就不处理.你也可以给token设置有效期30分钟什么的,然后线程去循环,定期删除过期的token,然后用户就需要重新登录获取新的token.
至于"两个都要用到么?",这个问题,看你怎么想了,你觉得光一个token不太安全,那么你就再加一个username在Header里面.收到请求后,不光检查是否有对应的token,还要看token对应的user里面的username和你Header发过来的username是否吻合.
主要是光一个token也不太安全,一般我们请求都是账号密码这种,双字段验证.token也可以搭配一个别的东西来验证.就像我说的,你搭配一个username.或者你觉得两个不够,你再多加几个字段.或者你觉得一个token就够了,不加也行.如果你觉得一个字段做安全认证的风险你也能接受,那就用一个.都没有硬性规定.全是码农们自我设计,自我感觉用几个比较合适.
但是我一般习惯使用username+token的形式来验证.
不知道能不能帮到你,还有疑问可以继续追问.
最近做了一个应用管理系统,采用前后端分离方式开发,前端使用了layuiadmin框架,后端使用了 .net web api,在开发过程中,遇到了ajax跨域问题及header自定义设置,这是所有前后端分离开发都需要解决的问题,在此做一个记录。
在前端ajax请求时,我们在header中设置了自定义的头部信息,将token写入了头部,便于后端进行身份认证, 如:xhr.setRequestHeader("Authorization", access_token)。通过了ajax全局方法做了统一处理。
在设置了自定义header后,浏览器到后端请求将分为两步进行。
浏览器将先发送一个预请求OPTIONS到后端,这里后端需要对OPTIONS请求做出正确响应,可以直接返回200状态码,不用返回内容信息。
浏览器接收到OPTIONS正确响应后会自动执行发送get或post请求。可此时依旧没有请求到后端数据,F12查看控制台输出,会发现报错了。这就是接下来要处理的跨域问题。
跨域的处理主要是服务器端设置响应头,针对.net web api 可直接在web.config文件中的<system.webServer>节点中进行设置,如图:
Access-Control-Allow-Origin //支持全域名访问,不安全,部署后需要固定限制为客户端网址
Access-Control-Allow-Methods //支持的http 动作
Access-Control-Allow-Headers //响应头 请按照自己需求添加
设置完成后,前端在chrome下调用api接口能正常相应,但在IE下依旧报错,如图:
最终发现,我们自定义设置了Authorization,在IE下,后端并没有给出相应的响应,原以为Access-Control-Allow-Headers设置为*,就能表示所有的响应头,但在IE下不行,需要将自己对应的需求以此设置。如图
设置完后,就可成功访问后端api。
注意:以下只是方法过程,具体变量参数得根据你们自己实际
import requests #导入包
header= {'Authorization':self.token} #在头信息中添加token
param = {'productId':617,'currentUserId':1143}#这里是接口要传的参数,我用字典传
response = requests.post(self.url_add_Record,params=param,headers=header,) #发送requests接口请求将url、params、heads传进去
res = response.json()#返回的response转化成json串
print(res) #打印res
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)