一文搞懂认证和授权

751 阅读4分钟

这是个绝大多数人都会搞混的问题,很多人把这两个含义混为一谈,但是还是有区别的。 首先,认证通俗一点来说就是

认证---who are you
授权---what can you do

Authentication(认证) 是验证您的身份的凭据(例如用户名/用户ID和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。所以,Authentication 被称为身份/用户验证。 Authorization(授权) 发生在 Authentication(认证) 之后。授权嘛,光看意思大家应该就明白,它主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如admin,有些对系统资源操作比如删除、添加、更新只能特定人才具有。

2.1 什么是Cookie ? Cookie的作用是什么? 首先这个问题也是面试官经常问的 我们分3个点来说 1.cookie保存了已经登陆的用户的信息,下次用户登陆的时候可以自动帮一些基本信息填了 2.cookie还可以保存session和token,我们向后端发送的时候会把cookie和session一起发过去,这样可以记录用户当前状态,http是无状态的 3.cookie还可以分析用户的行为,最简单就是顾客购物,在哪些商品上面浏览过,可以通过cookie看到

伪代码 Cookie cookie=new Cookie("username","shiyao"); cookie.setMaxAge(72460*60); response.addCookie(cookie);

  1. Cookie 和 Session 有什么区别?如何使用Session进行身份验证? 这个最好也是进行分类回答 1.cookie放在客户端,session放在服务端 2.session安全性比cookie高

session验证的过程 1.我们通过sessionid实现特定的用户,sessionid一般会放在redis中,我们发送请求的时候会把sessionid放入其中,然后一起发送给服务端

1.用户向服务器发密码和账号 2.服务器验证通过,服务器创建session,保存起来 3.服务器返回一个sessionid,写入用户的cookie中 4.用户保持登陆的,cookie将每个后续请求发送出去,同时会带上sessionid方便后面的验证 5.服务器可以将存储的cookie上的sessionid与存储在内存 中活着数据库中的sessionid返回

4.如果没有Cookie的话Session还能用吗?

一般来说如果使用cookie来保存sessionid,如果禁用了cookie,那么session无法正常工作。但是你可以自己手动来添加,比如直接在浏览器上 加上 javaguide.cn/?session_id…

5.为什么Cookie 无法防止CSRF攻击,而token可以?

CSRF(Cross Site Request Forgery)

首先我们再说一遍session认证的流程,我们通过cookie来存储sessionid,我们登陆之后把cookie返回客户端,然后客户端通过redis记录这个sessionid,客户端登陆之后后面发请求都会带着这个sessionid,服务器通过sessionid来标示你这个人。

攻击者可以利用这个特性,拿到这个cookie中的sessionid,获取这个sessionid,然后就可以进行攻击

但是我们用token的化,这个token会放在本地,验证需要token+session,攻击者这无法获取这个token,所以当然无法进行攻击

另外一种攻击是xss(Cross Site Scripting)

跨站脚本攻击(Cross Site Scripting)缩写为 CSS 但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。

什么是 Token?什么是 JWT?如何基于Token进行身份验证? token其实就相当于你的签名

JWT (JSON Web Token) 就是这种方式的实现,通过这种方式服务器端就不需要保存 Session 数据了,只用在客户端保存服务端返回给客户的 Token 就可以了,扩展性得到提升。 这个jwt由3部分组成

1.header(描述) 定义签名的算法和token的实现 2.playload(负载)用来存放实际需要传递的数据 3.signature(签名) 服务器通过header,playload,使用header指定的签名算法,生产密钥

1.用户向浏览器发送用户名和密码 2.身份验证返回签名的jwt和sessionid,上面包含用户信息 3.用户每次检查都向后端请求带上jwt 4.服务端检查jwt然后获取信息

7 什么是OAuth 2.0? OAuth 是一个行业的标准授权协议,主要用来授权第三方应用获取有限的权限 常用场景:第三方登陆 还有支付场景,比如说微信支付,支付宝支付

8 什么是 SSO? SSO(Single Sign On)一个用户登陆多个饿子系统中的一个就有权限访问其他系统

9.SSO与OAuth2.0的区别 OAuth 是一个行业的标准授权协议,主要用来授权第三方应用获取有限的权限