ikki@github.io:~$

  • Jwt实战和疑问

    JWT实战和疑问 关于JWT jwt 全称 json web token, JWE 和 JWS 都是可以JWT 的一种 JWT 是一种基于JSON 格式,经过签名或加密传输的令牌。 “JWT 和 Session 的区别” 这里想从概念和使用上来区别 Session 是服务器识别客户端的身份,并能做到会话的一种能力,它不是一种具体技术 JWT 是一种令牌,一种按照规范编码的字符串 通常,为了做到服务器识别客户端的身份,需要服务器和客户端使用一些列的技术手段参与。 服务器需要一个类似哈希表的存储结构,它可以是HashMap, 也可以是RedisDB。 客户端需要一个本地存储空间,它可以是 Cookie, sessionStorage, localStorage。 然后剩下的就是,在网络请求时,带上这个令牌就可以了。 从以上看出,在整个会话场景中,jwt和sessionid 扮演的角色没有什么不同。 JWT 对后端架构的影响 jwt 安全和存储 和Session 不同的是,使用JWT 后,服务器不需要一个类似哈希表的结构,去验证会话的有效性。session 使用的是“存在即有效”,而 jwt 使用的是签名和算法,安全性也大大提升。 jwt 的续期和吊销 jwt 和 session 都有过期机制。不同的是,jwt...

  • C4模型

    C4 架构图 C4 架构图 是一个面向不同受众的轻量架构图,通常有以下几个概念组成 Context 表示一个系统,和 业务上下文,可以对应 一个微服务 或者一个领域上下文 Context 之间的 通信方式 可能是 SOAP, Restful API, MQ 等, 通信可能存在延时的 Container 表示系统的一个 组成模块,可以表示系统的前端,后端, 数据库等, 他们之间通信方式 通常有 SOAP, Restful API等, 通信几乎没有延时的 Component 表示逻辑组,可以对应代码结构上的包,模块,设计模式等概念, 通信方式通常是 方法级别的 Class 具体代码或者UML图

  • 扫码登陆实战方案

    扫码登陆实战方案 需求 用户 使用手机扫描 浏览器登录页的二维码 用户手机上显示 用户许可页面,同时浏览器显示扫码成功,处于等待确认状态 用户在手机上确认登陆,浏览器显示确认成功并跳转登陆后页面 分析 浏览器请求服务器 并生成二维码,显然二维码内含有一些信息能被对应的手机客户端识别 二维码内的信息不能被其他软件识别,否则的话,浏览器会被其他人的客户端识别并发起登陆请求 二维码被扫描后不能再次被识别,有可能被其他账号扫描并登陆 浏览器二维码被展示出来后,需要实时监听到二维码的消费情况。 浏览器轮询显然是个不错的选择,但是我们可以使用**Server Sent Event **会是更好的选择 二维码在一定时间内没有被消费,应当过期处理 断网从连不能影响消息的消费 代码实战 浏览器 获取二维码等待响应 @GetMapping("/qr-code/{client_id}") public ResponseEntity<SseEmitter> QRLogin(@PathVariable("client_id") String clientId) { String authcode = UUID.randomUUID().toString(); SseEmitter sseEmitter = new SseEmitter(90 * 1000L); //90s 内没有完成 SSE会超时 String id = clientId + '@'...