慧点单C端用户登录态流程

黄鹏宇 221 2023-12-14

一、进入方式

1. 入口

  1. 微信客户端扫码进入【小程序】
  2. 微信客户端,点击进入【H5】
  3. 支付宝客户端,扫码进入【H5】
  4. 浏览器或其他APP 扫码或直接打开【H5】

2. 逻辑

所有的入口,本质上都是通过下方链接跳转
https://www.sdtlpro.com/scanfood/wxService/getUrl?cid=ERSD16518

  1. 【微信小程序】在微信后台配置:扫码场景下,跳转小程序。在小程序内获取cid参数即码牌编号。
  2. 【H5】该链接是个后端接口,重定向到中台获取userID接口。中台会携带userID参数,再重定向回应用入口。
    (中台接口)http://www.sdtlpay.com/commonWx/op?c=ScanFood&opData=https://scanfood.sdtlpro.com/scanfood/h5/index?erid=ERSD16518&extUsersId=&openid=syscode=1184778916389191680
    (应用入口)https://scanfood.sdtlpro.com/scanfood/h5/index?syscode=1173965108104134656&erid=ERSD20710&extUsersId=2088202867253312
    在H5内获取extUsersId当为用户标识。

二、问题

  1. 怎么保证应用入口url中的extUsersID是中台传过来,而不是被篡改的?
  2. C端前后端通信,传的明文参数。比如获取订单列表,使用的是用户ID
  3. 怎么在效率和安全中,做权衡?

三、风险和效率

1. 风险点在哪

  1. 获取订单列表、订单详情时,会回传敏感信息(如下单时填写的手机号、姓名等)
  2. 非本人取消订单
  3. 使用余额支付(支付密码)
  4. 非本人获取会员信息
  5. 商品信息被爬
  6. 对现有功能的影响

2. 怎么规避

  1. 归根结底是没有权限机制,使用jwt+拦截器,在token中带上user_id、openid等信息,在须鉴权接口上使用注解做拦截。

3. 怎么提高效率

  1. 对于非敏感接口,无须校验token

四、整体登录流程

1. 现有的登录方式清单

  1. 微信小程序wx.login()获取openid(小程序的openid)
  2. H5通过中台接口,获取openid(公众号的openid)或userID (支付宝)
  3. 手机号+验证码登录(在有用户态的基础上,更新token,加入memberID)

所以我们说的登录,应该区分为:用户登录、会员登录

2. 流程图

登录态1