token验证失败

web安全之token

允我心安 提交于 2020-01-11 03:18:30
参考:http://blog.csdn.net/sum_rain/article/details/37085771 Token,就是令牌,最大的特点就是随机性,不可预测。一般黑客或软件无法猜测出来。 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交、 2)anti csrf攻击(跨站点请求伪造)。 两者在原理上都是通过session token来实现的。当客户端请求页面时,服务器会生成一个随机数Token,并且将Token放置到session当中,然后将Token发给客户端(一般通过构造hidden表单)。下次客户端提交请求时,Token会随着表单一起提交到服务器端。 然后,如果应用于“anti csrf攻击”,则服务器端会对Token值进行验证,判断是否和session中的Token值相等,若相等,则可以证明请求有效,不是伪造的。 不过,如果应用于“防止表单重复提交”,服务器端第一次验证相同过后,会将session中的Token值更新下,若用户重复提交,第二次的验证判断将失败,因为用户提交的表单中的Token没变,但服务器端session中Token已经改变了。 上面的session应用相对安全,但也叫繁琐,同时当多页面多请求时,必须采用多Token同时生成的方法,这样占用更多资源,执行效率会降低。因此

SpringCloud OAuth2实现单点登录以及OAuth2源码原理解析

落花浮王杯 提交于 2020-01-08 14:44:34
SpringCloud OAuth2实现单点登录以及OAuth2源码原理解析 意识流丶 关注 42019.05.22 14:39:50字数 2,594阅读 9,647 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 Spring Security OAuth 是建立在 Spring Security 的基础之上 OAuth2.0 协议实现的一个类库 Spring Security OAuth2 为 Spring Cloud 搭建认证授权服务(能够更好的集成到 Spring Cloud 体系中) 单点登录主要包括 服务端:一个第三方授权中心服务(Server),用于完成用户登录,认证和权限处理 客户端:当用户访问客户端应用的安全页面时,会重定向到授权中心进行身份验证,认证完成后方可访问客户端应用的服务,且多个客户端应用只需要登录一次即可 相关版本: SpringBoot:2.1.5.RELEASE SpringCloud :Greenwich.SR1 认证中心Server 1.引入OAuth2依赖和web依赖(不加启动时会报无法访问javax.servlet.Filter) OAuth2中包含spring-cloud-starter

JwtUtils token生成器

早过忘川 提交于 2020-01-07 17:58:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import lombok.Data; public class JwtUtils { /** * 密钥 */ private static final String SECRET = "123456"; /** * 过期时间:秒 */ private static final int EXPIRE = 3600; private static String clientId = "clientId"; /** * 生成Token * @param tokenSource * @param expire * @return String *

springboot + redis + 注解 + 拦截器 实现接口幂等性校验(转)

帅比萌擦擦* 提交于 2020-01-06 21:59:49
出处:   作者:wangzaiplus    www.jianshu.com/p/6189275403ed 一、概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等 二、常见解决方案 唯一索引 -- 防止新增脏数据 token机制 -- 防止页面重复提交 悲观锁 -- 获取数据的时候加锁(锁表或锁行) 乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据 分布式锁 -- redis(jedis、redisson)或zookeeper实现 状态机 -- 状态变更, 更新数据时判断状态 三、本文实现   本文采用第2种方式实现, 即通过redis + token机制实现接口幂等性校验 四、实现思路 为需要保证幂等性的每一次请求创建一个唯一标识 token , 先获取 token , 并将此 token 存入 redis , 请求接口时, 将此 token 放到 header 或者作为请求参数请求接口, 后端接口判断 redis 中是否存在此 token : 如果存在, 正常处理业务逻辑, 并从 redis 中删除此 token

商城项目-首页判断登录状态

半城伤御伤魂 提交于 2020-01-03 17:22:46
3.首页判断登录状态 虽然cookie已经成功写入,但是我们首页的顶部,登录状态依然没能判断出用户信息: 这里需要向后台发起请求,根据cookie获取当前用户的信息。 我们先看页面实现 3.1.页面JS代码 页面的顶部已经被我们封装为一个独立的Vue组件,在 /js/pages/shortcut.js 中 打开js,发现里面已经定义好了Vue组件,并且在created函数中,查询用户信息: 查看网络控制台,发现发起了请求: 因为token在cookie中,因此本次请求肯定会携带token信息在头中。 3.2.后台实现校验用户接口 我们在 leyou-auth-service 中定义用户的校验接口,通过cookie获取token,然后校验通过返回用户信息。 请求方式:GET 请求路径:/verify 请求参数:无,不过我们需要从cookie中获取token信息 返回结果:UserInfo,校验成功返回用户信息;校验失败,则返回401 代码: /** * 验证用户信息 * @param token * @return */ @GetMapping ( "verify" ) public ResponseEntity < UserInfo > verifyUser ( @CookieValue ( "LY_TOKEN" ) String token ) { try { //

微信JS SDK接入的几点注意事项

家住魔仙堡 提交于 2019-12-30 01:54:19
微信JS SDK接入,主要可以先参考 官网说明文档 ,总结起来有几个步骤: 1.绑定域名: 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 2.引入JS文件:在需要调用JS接口的页面引入如下JS文件,(支持https): http://res.wx.qq.com/open/js/jweixin-1.2.0.js , 备注:支持使用 AMD/CMD 标准模块加载方法加载,这里补充引入jquery.cookie.js,sha1.js,后面需要用 3.获取access_token,再获取jsapi_ticket,由于不能频繁调用获取jsapi_ticket的函数,可以保存一份全局的jsapi_ticket,存放在cookie中,如果过时了再重新获取;另外,这两个获取操作建议放到服务端确保安全性; 4.拼接noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分),对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。 5.sha1加密生成签名signature;

微信JS SDK接入的几点注意事项

感情迁移 提交于 2019-12-30 01:52:53
微信JS SDK接入,主要可以先参考 官网说明文档 ,总结起来有几个步骤: 1.绑定域名: 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 2.引入JS文件:在需要调用JS接口的页面引入如下JS文件,(支持https): http://res.wx.qq.com/open/js/jweixin-1.2.0.js , 备注:支持使用 AMD/CMD 标准模块加载方法加载,这里补充引入jquery.cookie.js,sha1.js,后面需要用 3.获取access_token,再获取jsapi_ticket,由于不能频繁调用获取jsapi_ticket的函数,可以保存一份全局的jsapi_ticket,存放在cookie中,如果过时了再重新获取;另外,这两个获取操作建议放到服务端确保安全性; 4.拼接noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分),对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。 5.sha1加密生成签名signature;

微信公众号支付(三):页面调用微信支付JS并完成支付

落爺英雄遲暮 提交于 2019-12-29 05:43:28
一、调用微信的JS文件 1.首先要绑定【JS接口安全域名】,“公众号设置”的“功能设置”中 2.引入JS文件  备注:支持使用 AMD/CMD 标准模块加载方法加载 1 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 3. 通过config接口注入权限验证配置 1 wx.config({ 2 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 3 appId: '', // 必填,公众号的唯一标识 4 timestamp: , // 必填,生成签名的时间戳 5 nonceStr: '', // 必填,生成签名的随机串 6 signature: '',// 必填,签名,见附录1 7 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,这里只写支付的 8 }); 4. 通过ready接口处理成功验证 1 wx.ready(function(){ 2 wx.hideOptionMenu();//隐藏右边的一些菜单 3 }); 二、 wx.config 中的签名 1

什么是token(转)

坚强是说给别人听的谎言 提交于 2019-12-27 04:57:28
转自: https://blog.csdn.net/daimengs/article/details/81088172 什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。 简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。 身份认证概述 由于HTTP是一种没有状态的协议,它并不知道是谁访问了我们的应用。这里把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下次这个客户端再发送请求时候,还得再验证一下。 通用的解决方法就是,当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里可以说明登录的用户是谁,然后把这条记录的id发送给客户端,客户端收到以后把这个id存储在cookie里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下cookie里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

spring security oauth2.0 实现

守給你的承諾、 提交于 2019-12-27 04:14:28
本文转载自: https://www.cnblogs.com/0201zcr/p/5328847.html 作者:0201zcr 转载请注明该声明。   oauth应该属于security的一部分。关于oauth的的相关知识可以查看阮一峰的文章: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 一、目标   现在很多系统都支持第三方账号密码等登陆我们自己的系统,例如:我们经常会看到,一些系统使用微信账号,微博账号、QQ账号等登陆自己的系统,我们现在就是要模拟这种登陆的方式,很多大的公司已经实现了这种授权登陆的方式,并提供了相应的API,供我们开发人员调用。他们实际上用的也规范是oauth2.0的规范,通过用户授权的方式,获取一些信息。以前就做过一些类似的,如: 微信扫码登陆: http://www.cnblogs.com/0201zcr/p/5133062.html 微信客户端授权登陆: http://www.cnblogs.com/0201zcr/p/5131602.html      但是假如你的系统要提供其他网站使用你的账号密码登陆,你就需要写好相应的接口规范, 给人家调用。用得比较多的是使用spring security oauth实现的方式。 我们这里使用 meaven 导入我们所需要的 jar 包