对于用户访问服务器资源,未登录跳转到登录界面,登录成功交给用户一个token,前端在本站发起请求时都要携带token,每次验证token。现在有个问题,如果用户是从其他网站直接访问的本网站的界面,那么存在localstoreage的token是不能直接通过前端js代码发送到服务器的,也就是客户端即使有token但服务器也不知道这个人时候(可能)有权限访问的,会跳转到登录界面。
服客户端如果在每次拿到登录界面,都在前端使用js代码判断localstroage里的token是不是空的,来发送ajax请求让服务器判断,如果token正确那么就尝试拿第一次从外部访问的uri(存在服务器一段时间,如果有的话。或者对于返回登录界面的回复,都保存一个uri,默认/,如果是服务器收到token为空,就是请求的那个uri),对于从登录页面默认发送的这次带token的ajax请求如果通过了就跳转,如果不正确就什么也不发生(这样其实很不安全)。
在服务端保存uri的操作不好很不安全。使用第二个在几次跳转之间保存uri的方式还行。
所以正常实现都是什么样的,单纯的使用localstoreage里的token而没有其它操作的话是很麻烦保证安全性的同时又能完善功能的。正常的做法是不是对于普通的操作使用验证cookies就足够了但是对于重要的操作分几个流程流程,产生,分发token,收集验证token,而没有必要保证所有操作都是通过这种方式从浏览器发送过来的。
一种方案是单点登录的思想,一处登录处处登录,第二种,就是作为第三方系统作为客户端主动接入你们系统,自己获取token,接口请求时自己携带token