Web用户登陆常见方案
文章目录
服务端维护会话(Session)
服务端维护会话(Session)时,主体流程如下
用户请求Header中没有Cookie, 或Cookie中没有session-id
- 1.用户未登录,跳转至登陆入口,用户填写用户名密码.
- 2.服务端验证密码通过后,生成session并保存到服务端(session内包含用户信息)
- 3.服务端下发Set-Cookie, 内容为session-id(仅ID)
用户请求Cookie已包含session-id
- 1.验证Session id是否有效, 并读取服务端存储的session
- 2.根据session信息验证用户是否合法(可灵活根据IP,终端等验证)
- 3.验证完成
服务端维护会话的优缺点如下.
优点:
- 1.节省客户端网络传输(Header只传输id)
- 2.Session可存储信息量大,可自由拓展
- 3.服务端可自由控制所有Session
缺点:
- 1.多台应用服务器同时提供服务时, 需要Session共享(通常存放在Redis中)
- 2.Redis崩溃之后,所有用户会话丢失
服务端不维护会话(JWT)
常见的服务端不维护会话的实现是JWT(JSON Web Tokens).基本思路是扩充Cookie的信息量,即用户发送的Cookie中包含此会话的所有信息(Cookie内容为一个JSON).
主体流程如下:
用户请求Header中没有Cookie
- 1.用户未登录,跳转至登陆入口,用户填写用户名密码.
- 2.服务端验证密码通过后,生成JWT并加密(JWT内包含Cookie过期时间的等信息)
- 3.服务端下发Set-Cookie, 内容为JWT所有内容
用户请求带有Cookie
- 1.从Cookie中解析JWT,解析失败则返回未登录提示
- 2.验证JWT的过期时间,用户名是否与当前请求一致.
- 3.验证完成
JWT验证关键点:
- 确保生成JWT的密钥不泄露
- 确保外部无法伪造JWT
常见的JWT属性:
- iss (issuer):签发人
- exp (expiration time):过期时间
- sub (subject):主题
- aud (audience):受众
- nbf (Not Before):生效时间
- iat (Issued At):签发时间
服务端不维护会话(JWT)的优缺点如下.
优点:
- 1.服务端无需存储会话状态,业务更容易拓展
- 2.可低成本实现多点登陆
缺点:
- 1.每次HTTP访问,Cookie都携带了全量的用户信息,网络流量变大
- 2.服务端无法低成本废止某个会话
参考资料
- https://tools.ietf.org/html/rfc7519#section-11.2
- https://jwt.io/
版权声明:本文为cntechpower原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。