不依赖于微信等第三方的扫描登录系统

背景

扫描登录很安全,但基本上大家用的都是基于微信的,需要到开发平台申请。
对于大量的内部系统,比如流程管理系统、企业内部邮箱、各种管理后台,目前大家基本都采用密码登录,相对外面的网站员工在公司内部网站更会用弱密码。
内部系统弱口令的危害很大:资料泄漏、后台权限,而且内部系统往往校验少,更可能被webshell提权。

产品说明

在这样的背景下我一直在琢磨做一个开源的项目,正好我又有些密码学背景,这个项目目前开始动工了,如果符合大家需求希望踊跃留言,我更有动力做下去。

功能

  1. 最主要当然是实现安全的扫描登录,用什么扫?微信扫(调微信小程序)、或者app。我会提供小程序和跨平台的app,ios已上架。
  2. 网站自助接入,不需要任何第三方开通,并且网站接入难度很低
  3. 支持开放注册式的网站,也支持不开放注册的网站
  4. 目前只支持pc网站,后续可能会做app的授权登录

验证流程

  1. 网站接入时生成一对公私钥
  2. 网站登录页面使用sdk生成一个二维码,二维码中包含:一段短时间内唯一的随机数据data+时间戳+网站公钥+网站信息(站点名等)+ 授权后app会回调的url+使用网站私钥对前面的信息进行签名,对于不开放注册网站在url里带上分配给用户的身份id
  3. app扫描二维码后,先验证二维码的签名,再比对站点信息和公钥是不是在本地已经存在,存在直接到第4步,不存在就走第一次绑定流程(对开发注册站点叫注册),记录下站点信息+站点公钥,并生成一对客户端公私钥保存
  4. 使用客户端私钥对二维码中的随机数据签名得到sign+时间戳+再加上app的公钥+用户信息(昵称头像等)=data,再使用网站公钥对data进行加密,将加密后的数据附带在第一步的授权回调url中,访问url。
  5. 网站收到第4步的数据后,先使用自己的私钥解密数据,再看客户端的公钥能不能验证客户端发过来的签名,再校验这个data是一段时间内没登录过的,验证通过后再看这个公钥是不是已在数据库中存在,不存在说明是首次登录,已存在是二次登录,验证通过后网站给使用相同随机数data的网页客户端发送登录成功cookie

总结

本身功能不复杂,主要用了一个非对称的私钥签名公钥验证,和非对称的公钥加密私钥解密。
在设计中,对以下攻击进行了防御:

  • 网站钓鱼,二维码中的回调url使用了站点私钥签名,防止篡改回调url
  • 重放攻击,第5步中校验了的随机数据是第一步生成的,是短时间唯一的
  • 中间人攻击,可以防止app与服务器自己的中间人攻击,但浏览器与服务器之间通讯还是需要走https

如果您想使用请留言,如果您觉得哪里有安全漏洞更请留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
企业微信支持第三方应用使用微信授权登录,以下是 C# 实现微信授权登录的大致步骤: 1. 获取授权链接:首先需要通过企业微信开放平台获取授权链接。这个链接包含了应用的 AppID、授权作用域、回调地址等信息。 2. 用户授权:用户通过访问授权链接,进入企业微信登录页面,输入企业微信账号和密码,完成授权流程。 3. 回调处理:用户完成授权后,企业微信会自动跳转到事先设置好的回调地址,并将授权码或访问令牌等信息传递给回调地址。 4. 获取用户信息:根据回调返回的授权码或访问令牌,可以通过企业微信开放平台提供的接口获取用户信息。 具体实现步骤如下: 1. 定义授权链接和回调地址:在 C# 代码中定义授权链接和回调地址。 2. 生成授权链接:使用 C# 实现代码生成授权链接,并将用户重定向到授权链接。 3. 处理回调请求:当用户完成授权后,企业微信会将授权码或访问令牌等信息传递给回调地址。在 C# 代码中可以通过接收回调请求并处理回调参数来获取授权码或访问令牌。 4. 获取用户信息:根据获取到的授权码或访问令牌,使用企业微信提供的接口获取用户信息。 需要注意的是,企业微信的授权登录流程与微信的授权登录流程类似,但是具体实现细节会有所不同。需要开发者根据具体的需求和企业微信开放平台提供的文档进行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值