本文只是一个Demo设计,仅供学习思路,并不能用于真实的线上业务,因为有很多漏洞。

一般线上应用都需要对用户身份进行鉴权,通过身份校验的用户,都会得到一个access_token,这个凭证是全局唯一接口调用凭据,调用应用的各接口时都需使用access_token,如果token校验失败,则表明无权限访问相关接口。

注:下文access_token 和 token 是一个东西。

注:用户需要进行妥善保存access_token。线上应用的客户端一般会将token存放在前端的存储空间———Cookie中。

access_token的一些安全要求:

  • access_token的存储至少要保留512个字符空间。
  • access_token的有效期一般为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

那么问题来了,线上应用是怎么做身份鉴权的呢?

鉴权方式

常见的鉴权方式由如下三种:

  • 账号+密码
  • 账号+短信验证码
  • 第三方渠道——微信

账号+密码

这个很简单,就是对比数据库中的账号密码,一致就发放token。

账号+短信验证码

这个流程相对多一些,需要先给用户手机发送一条短信,短信里包含了一个六位的数字(称作:短信验证码),用户将验证码发送到服务器,服务器判断验证码一致就发放token。

第三方渠道鉴权——微信

本文主要讲解这个,结合着加密方式做身份鉴权。

一般来说,每个微信用户都会由一个微信ID——appid,

正常的流程,会把用户的appid作为一个唯一标识进行存储,做鉴权....

正常的流程是这样,但是从安全角度来说,它不安全,并不能阻挡黑客的伪造,

比如说黑客伪造了很多appid,发送到服务器,服务器并没有能力鉴别谁是伪造的appid,那么就会造成鉴权上的绕过。

当然,微信推出了一个服务,每次获取 openid 参数时,调用微信公众平台的“获取用户基本信息”的接口去鉴别这个openid是不是伪造的。不过这个方式,只能证明这个opendid是不是微信,并不能证明这个opendid是不是自己系统的,可以结合着另一种方式,用加密做鉴权

调用流程:

  1. 加密做鉴权:前端(用户)获得了微信授权openid后,将openid传输给后端,

    后端先调用 微信公众平台的“获取用户基本信息”的接口去鉴别这个openid是不是伪造的,才能入库。

  2. 后端把回调给前端的 openid 进行加密,返回给前端。

  3. 前端调用 api 的时候,前端需要把授权得到的加密后的 openid 传给后端,后端先做解密校验操作,,如果解密操作失败,则认定openid非法,拒绝此次请求,成功才继续执行进行剩下的业务逻辑。

  4. 因为服务器同时负责加密和解密,需要采用对称加密算法,密钥安全的存储在服务器里。

  5. 后期只要openid能解密成功,就意味着是自己系统加密的,只要密钥不泄露,别人无法伪造。

调用流程图演示:

如果你有耐心看到这里,恭喜你能看到更远的风景,

这个方案并没有考虑完善,

比如,如果2个小时候后token失效,或者用户本地的cookie丢失,那么用户怎么才能再次才能获取token呢?

答案是:这个方案获取不了了,所有这个只是一个一次性系统。美丽的废物。

但是本文是想讨论一下,通过加密做鉴权的一些可能性。

当然,这个方案做不了,可以转换一下思路,通过其它方式做,

比如,在前端里面集成JS代码做签名,然后后台通过校验签名来确保请求是从自己的渠道发过来的。

Reference

https://www.cnblogs.com/xjnotxj/p/9289528.html

通过加密的方式做身份鉴权—Demo设计的更多相关文章

  1. # RESTful登录(基于token鉴权)的设计实例

    使用场景 现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西.申请成功后,后面其他的支付请求都要带上这个token ...

  2. 九、postman的自带的鉴权demo

    basic authentication https://postman-echo.com/basic-auth username:postman password:password

  3. web开发常见的鉴权方式

    结合网上找的资料整理了一下,以下是web开发中常见的鉴权方法: 预备:一些基本的知识 RBAC(Role-Based Access Control)基于角色的权限访问控制(参考下面①的连接) l    ...

  4. .NET Core中的鉴权授权正确方式(.NET5)

    一.简介 前后端分离的站点一般都会用jwt或IdentityServer4之类的生成token的方式进行登录鉴权.这里要说的是小项目没有做前后端分离的时站点登录授权的正确方式. 一.传统的授权方式 这 ...

  5. Tomcat 容器的安全认证和鉴权

    大量的 Web 应用都有安全相关的需求,正因如此,Servlet 规范建议容器要有满足这些需求的机制和基础设施,所以容器要对以下安全特性予以支持: 身份验证:验证授权用户的用户名和密码 资源访问控制: ...

  6. 深入理解k8s中的访问控制(认证、鉴权、审计)流程

    Kubernetes自身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象. 在Kubernetes的访问控制流程中,用户模型是 ...

  7. .NET CORE 鉴权

    基础信息 1.什么是鉴权授权? 鉴权是验证用户是否拥有访问系统的权利,授权是判断用户是否有权限做一些其他操作. 2.传统的Session 和Cookie 主要用于无状态请求下的的用户身份识别,只不过S ...

  8. RESTful登录设计(基于Spring及Redis的Token鉴权)

    转载自:http://www.scienjus.com/restful-token-authorization/ http://m.blog.csdn.net/article/details?id=4 ...

  9. 接口的鉴权&响应数据解密

    前言: 1.开放的接口为了避免被别人攻击,频繁刷接口,浪费服务器资源,这就涉及到签名(Signature)加密了 2.API 使用签名方法(Signature)对接口进行鉴权(Authenticati ...

  10. 接口鉴权之sign签名校验与JWT验证

    需求描述: 项目里的几个Webapi接口需要进行鉴权,同接口可被小程序或网页调用,小程序里没有用户登录的概念,网页里有用户登录的概念,对于调用方来源是小程序的情况下进行放权,其他情况下需要有身份验证. ...

随机推荐

  1. 戴尔笔记本游匣DELL G16 7620更换固态硬盘从选购固态硬盘到系统和应用程序迁移(克隆)全过程(教程)

    又到了捣鼓电脑的时候了.去年(2022年)8月14日买的电脑,当时7月份刚出戴尔游匣G16,搜了一下,2022年7月22日,戴尔首发游匣G16国行版本. 到现在也就用了差不多半年的时间,我的内存满了, ...

  2. C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  3. 离线安装Redis

    redis 直接去官网下载tar包就可以 主要是gcc 环境的安装包不太好找,我下载的还缺少 make 如果服务器比较干净,还得预装一下lrzsz-0.12.20.tar.gz 上传下载文件,unzi ...

  4. PHP运算符优先级(摘自在线工具)

    PHP运算符优先级 结合方向 运算符 附加信息 非结合 clone new clone 和 new 左 [ array() 非结合 ++ -- 递增/递减运算符 非结合 ~ - (int) (floa ...

  5. [快速阅读八] HDR->LDR:Matlab中tonemapfarbman函数的解析和自我实现。

    最近受朋友的委托,想自己实现Matlab里的一个HDR转LDR的函数,函数名是tonemapfarbman,乘着十一假期,稍微浏览下这个函数,并做了一点C++的实现和优化. 为了看到这个函数的效果,需 ...

  6. 05-react的类组件和函数组件 -- 状态 state

    // 函数组件是无状态的 既没有数据的 类似 vue 组件中的 data 数据 // 类组件是有状态的组件 是有数据的 是双向绑定的数据 是数据驱动视图的 负责UI的视图更新 (单个组件的私有数据组件 ...

  7. 使用svn保存markdown文档

    使用svn管理md文档时,使用谷歌直接访问出现中文乱码,解析格式错误的问题,可以通过安装谷歌浏览器的插件解决. 一.解决格式解析错误的问题 安装插件 Markdown Preview Plus ,安装 ...

  8. NJU ICS2024 PA 作业心得(二)

    NJU ICS2024 PA 作业心得(二) RTFSC问题处理 这部分一定要很仔细很仔细的阅读RISCV的手册,否则后边会吃苦头的. 我们这里从框架的角度对取指之前和执行之后的操作进行一些简要的补充 ...

  9. 现在 Llama 具备视觉能力并可以在你的设备上运行 - 欢迎使用 Llama 3.2

    Llama 3.2 来了!今天,我们欢迎 Llama 系列的下一个版本加入 Hugging Face.这次,我们很高兴与 Meta 合作发布多模态和小型模型.在 Hub 上提供了十个开源模型 (5 个 ...

  10. KubeSphere 3.2.0 发布:带来面向 AI 场景的 GPU 调度与更灵活的网关

    现如今最热门的服务器端技术是什么?答案大概就是云原生!KubeSphere 作为一个以 Kubernetes 为内核的云原生分布式操作系统,也是这如火如荼的云原生热潮中的一份子.KubeSphere ...