基于Token验证的登录方式
2018-05-28 21:43
906 查看
首先,引入crypto-js 或者测试直接使用下面的(用浏览器打开下面链接,复制到JS文件里,用script src的方式引到HTML中,避免链接失效)
首先获取公钥,然后对密码进行加密,然后把账号密码发给后端,成功后,后端返回Token,该Token 是加密过的,需要用aes进行解密。解密后对Token 进行Url签名。(把Token和Id放在sessionStorage或者localStorage里避免重复的去后端取)
登录代码如下:
//请求登录接口 let myajax = $.ajax({ url: getkeyApi, timeout: 20000, type: "post", cache: false, dataType: "json", success: function (data) {//获取公钥 if (data.Result) { setMaxDigits(131); const key = new RSAKeyPair(data.Exponent, "", data.Modulus); const username = obj.field.username; const password = obj.field.password; const encrypetedPassword = encryptedString(key, base64encode( password)); $.ajax({ url: loginApi, timeout: 20000, type: "post", data: { userName: username, passWord: encrypetedPassword }, success: function (res) {//登录成功的回调,获取Token存入sessionStorage let _token = res.Data.AccessToken if (res.Result) { sessionStorage.setItem("Id",res.Data.Id) // aes解密 var WfAesUtils = { _KEY: "12345678900000001234567890000000", //32位 _IV: "1234567890000000", //16位 Decrypt: function (str) { var key = CryptoJS.enc.Utf8 .parse(this._KEY); var iv = CryptoJS.enc.Utf8.parse( this._IV); var encryptedHexStr = CryptoJS.enc.Hex.parse( str); var srcs = CryptoJS.enc.Base64.stringify( encryptedHexStr); var decrypt = CryptoJS.AES.decrypt( srcs, key, { iv: iv, mode: CryptoJS.mode .CBC, padding: CryptoJS .pad.Pkcs7 }); var decryptedStr = decrypt.toString( CryptoJS.enc.Utf8); return decryptedStr.toString(); } } let _reToken = WfAesUtils.Decrypt(_token);//请求成功后,写入 access_token layui.data(layui.setter.tableName, { key: setter.request.tokenName, value: _reToken });
//登入成功的提示与跳转 layer.msg('登录成功', { offset: '15px', icon: 1, time: 1000 }, function () { location.hash = search.redirect ? decodeURIComponent(search.redirect) : '/';
}); } else { layer.msg('登录失败'); } }, error: function (jqXHR, status, ex) { layer.msg('登录失败'); }, beforeSend: function (jqXHR) { layer.load(1); }, complete: function (XMLHttpRequest, status) { layer.closeAll('loading'); if (status === 'timeout') { myajax.abort(); layer.msg('请求超时'); } } }); } else { layer.msg('登录失败'); } }, error: function (jqXHR, status, ex) { layer.msg('登录失败'); }, complete: function (XMLHttpRequest, status) { if (status === 'timeout') { myajax.abort(); layer.msg('请求超时'); } } });
url签名:首先获取Id和Token 在Token前面加上接口地址(/ControllerName/ActionName不懂的小伙伴问后端)
然后对字符串拼接后的Token进行sha256加密,加密后,在操作需要登录后才能操作的接口时,一并传给后端(即本身要传的参数在多加这两个字段userId和sgin)
对于登录后的接口操作都要带上userId 和 Sign
如果本文对您有帮助请点个赞!
Thanks♪(・ω・)ノ
相关文章推荐
- 基于OAuth2.0的登录验证授权方式获取sessionkey
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
- spirng-boot中,基于既有的token验证方式,利用spring-security实现权限系统
- 基于Token的身份验证,用户登录
- 取消windows XP用户密码验证登录方式 分类: 开发常见问题解决方案 2010-04-11 08:07 1107人阅读 评论(0) 收藏
- 基于 Token 的身份验证
- 【转】【Oracle】oracle登录验证的三种方式(详解)
- MVC 基于FormsAuthentication 方式的权限验证
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证
- 基于struts拦截器的登录验证
- SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法
- 基于Token的身份验证——JWT
- 了解基于Token的身份验证的来龙去脉
- 两系统用asp.net forms 身份验证方式实现跨域登录信息共享
- sql server 2005 windows验证方式不能登录的解决办法
- 基于Token的身份验证——JWT
- 登录验证全局控制的几种方式(session)
- App和后台通信基于session_id的登录验证
- 客户端基于层的验证不用alert方式
- Web APIs 基于令牌TOKEN验证的实现