网站常见的鉴权认证方式有哪几种?
一、什么是鉴权
鉴权(authentication)是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。在建立用户时,就为此用户分配一个密码,用户的密码可以由管理员指定,也可以由用户自行申请。这种方式的弱点十分明显:一旦密码被偷或用户遗失密码,情况就会十分麻烦,需要管理员对用户密码进行重新修改,而修改密码之前还要人工验证用户的合法身份。
为了克服这种鉴权方式的缺点,需要一个更加可靠的鉴权方式。目前的主流鉴权方式是利用认证授权来验证数字签名的正确与否。
二、网站常见的鉴权认证方式
- Session机制
- JWT机制
- Auth2机制
2.1Session认证的原理
Set-Cookie:s_id=1b3ra9
字段,浏览器发现这个字段就把他放到cookie中,下一次用户再一次请求的时候,请求会自动带cookie字段,服务器收到带cookie请求,则先进行比较,找到相同的s_id,之后发送更多的信息返回给浏览器。2.2JWT(全称:JSON Web Token)认证的原理
token = str1+\'.\'+str2+\'.\'+str3
。浏览器需要手动的把token存储起来,可以存在cookie里,下一次发送请求的时候只需要/user?jwt_token=xxx
就可以了。服务器收到请求后,要对token进行验证。(图片上步骤8)base64加密解密方法。
- 再一次发送请求的方法:
- /user?jwt_token=xxx;
- 或者把token放到请求头(Authorization)里面。
- 优点:
- 任何地方都可以使用,使用范围广泛。(只需要把Token在客户端保存起来)
- 服务器额存储压力小,session是需要进行存储的,但是Token不需要。
- 缺点:
- 增加了计算压力,每个请求到达,都要进行计算。
- cookie的续期比较麻烦。
- 点击了发送请求后,立即点击注销,但是cookie还是存在。
2.3Auth2认证的流程
- 使用场景
- 网站会有一个登陆,(比如QQ登陆),第三方账号登陆,没有注册,登陆后会回到当前网站。
- 流程
网站找认证服务器要用户的数据。网站必须拿到用户允许服务器给数据的凭证,否则服务器不会随意给数据。用户向服务器奥认证,服务器询问是否确定给凭证,用户回复确定才会给凭证。- (9)步骤:一定要有凭据、自己的名片、自己的密钥。
2.4和JWT相比Session机制有哪些缺点
- 如果摆脱浏览器,没有cookie,不能用在任何场景。(小程序、终端、app)
- 如果把session放在内存中,则会导致占用大量内存。
- 当采用分布式的时候,如果把数据存储在数据库中,则进行处理会比较麻烦。
- 如果存在XSS漏洞,cookie容易泄露。
2.5Session机制如何能尽量保证安全
- 对保存到cookie里面的敏感信息必须加密
- 设置HttpOnly为true(针对http)
- 该属性值的作用就是防止Cookie值被页面脚本读取。
- 但是设置HttpOnly属性,HttpOnly属性只是增加了攻击者的难度,Cookie盗窃的威胁并没有彻底消除,因为cookie还是有可能传递的过程中被监听捕获后信息泄漏。
- 设置Secure为true(针对HTTPS)
- 给Cookie设置该属性时,只有在https协议下访问的时候,浏览器才会发送该Cookie。
- 把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
- 给Cookie设置有效期
- 如果不设置有效期,万一用户获取到用户的Cookie后,就可以一直使用用户身份登录。
- 在设置Cookie认证的时候,需要加入两个时间,一个是“即使一直在活动,也要失效”的时间,一个是“长时间不活动的失效时间”,并在Web应用中,首先判断两个时间是否已超时,再执行其他操作。
- 一定不要在cookie中存储重要和敏感的数据
JavaScript中cookie那些事
cookie数据并非存储在一个安全的环境中,其中包含的任何数据都可以被其他人访问到,所以不要在cookie中存储如银行卡或个人地址之类的数据。