在用户点击登录时,收集用户输入的账号和密码,发送给后端与数据库中的数据对比验证,比较用户是否存在,密码是否正确;都 OK 就向用户发送登陆成功的信号和用户信息
2. 手机验证码登录、邮箱登录用户点击发送验证码,前端就把手机号传给后端,让后端生成一个随机数 ,然后把手机号码和完整的短信内容发送给第三方短信平台,在第三方短信发送成功的回调里把手机号和随机数储存到数据库中;用户收到短信后点击登录,前端收集手机号和验证码传给后端和数据库进行对比,验证成功就返回登录成功和用户信息等
3. 第三方登录(微信)第三方账号登录都需要去申请授权;
用户点击第三方登录时,前端调用接口获取第三方登录页面的链接地址(拼接了后端加密过后的签名、登录成功后的回跳地址(redirect_uri)等)
比如点击QQ登录的话,就直接跳转到后端返回的第三方登录链接
- cookie + Session
- 首次登录验证成功之后,后端会创建一个 Session 对象并保存到缓存或者数据库里
- 然后在响应登录接口的响应头里,设置 Set-cookie 字段,并把 SessionId 等信息写入进去,并设置过期时间,这些信息就是 cookie,然后浏览器会保存这些 cookie 信息
- 之后再发送请求的时候,如果当前域名有保存 cookie 信息的话,浏览器会自动在请求头上添加 cookie 字段,并带上保存的 cookie 信息
- 然后后端接收到请求后,会把请求头中的 cookie 信息提取出来和存在服务器的对应的 Session 信息作对比,如果一致就说明登录验证成功了,不需要再重复登录
- Token
- 首次登录验证成功之后,后端一般使用JWT 将用户信息、签名等加密生成一串字符串,存到数据库并返回给前端
- 前端再存起来,存在cookie、SessionStorage、LocalStorage都可以
- 之后再次请求时浏览器也不会默认携带,需要我们自己在请求拦截器里添加请求头,把 Token 信息带上
- 然后后端就拿到 Token 信息来查找数据库里有没有,如果有再执行查询数据库操作等返回前端请求的数据,因为设置了过期时间的话,时间到了Redis会自动就删掉数据库里的 Token,查询就不会有。当然也有人是开定时任务去删
- 更安全:因为可以不用发送 cookie 了,能够·避免 CSRF 攻击`。也不需要操作 Session 了
- 多服务器方便共享:前后端代码文件等资源放在不同的服务器,请求时都能获取到正确的登录状态
指在多系统应用群中登录一个系统,那么其他所有系统都得到授权都无需再次登录;避免了一个一个登录、然后一个一个注销 简单点就是在一个应用注册的账号可以同时在多个应用上登陆
2.同域下实现SSO比如百度(baidu.com)、百度网盘(pan.baidu.com)、百度贴吧(tieba.baidu.com)、百度地图(map.baidu.com).这些都是在同一域名下,要实现在百度上登录、注册成功后,在百度地图或百度贴吧上也能显示已登录
方法:- 首先需要把 cookie 设置给顶级域,这样子他下面所有的子域都可以访问他的 cookie
- 然后通过 Redis、Tomcat 等,都可以把 Session 设置成在这几个域名里共享
比如淘宝(taobao.com)、天猫(tmall.com)、支付宝(alipay.com)、阿里巴巴(1688.com)…
需要一个独立的能够统一管理或者共享这些状态信息的 认证中心(CAS),也就是SSO登录系统
copy网站:
https://mp.weixin.qq.com/s/S56OCF85YyPI-HtotP6w_g



