传统的认证系统
1.用户在登录域输入用户名和密码,然后点击登录
2.请求发送之后,通过在后端查询数据库验证用户的合法性。如果请求有效,使用在数据库得到的信息创建一个session,然后在响应头信息中返回这个session的信息,目的是把这个session ID存储在浏览器中
3.在访问应用中受限制的后端服务器提供这个session信息
4.如果session信息有效,允许用户访问受限制的后端服务器,并且把渲染好的HTML内容返回
缺点
1.无法在移动端共享服务器创建的session和cookie
2.在web端渲染好的HTML页面被返回,在移动端响应需要包含一些类似JSON或者XML的东西
基于 token 的认证
1.用户在登录表单中输入用户名和密码,然后点击登录
2.请求发送之后,通过在后端查询数据库验证用户的合法性。如果请求有效,使用在数据库得到的信息创建一个token,然后在响应头信息中返回这个的信息,目的是把这个token存储到浏览器的本地存储中
3.在每次发送访问应用中受限制的后端服务器的请求时提供token信息
4.如果从请求头信息中拿到的token有效,允许用户访问受限制的后端服务器,并且返回JSON或者XML
优点
没有返回的session或者cookie,并且我们没有返回任何HTML内容,那意味着我们可以把这个架构应用于特定应用的所有客户端中
token通过请求头传输,而不是把认证信息存储在session或cookie中,这意味着无状态,你可以从任意一种可以发送HTTP请求的终端向服务器发送请求
JWT
JWT代表JSON Web Token,它是一种用于认证头部的token格式。这个token帮你实现了在两个系统之间以一种安全的方式传递信息。包含了三部分:header,payload,signature
header是token的一部分,用来存放token的类型和编码方式,通常是使用base-64编码
payload包含了信息,你可以存放任一种信息,比如用户信息,产品信息等,它们都是使用base-64编码方式进行存储
signature包括了header,payload和密钥的混合体,密钥必须安全地保存储在服务端