一、进入方式
1. 入口
- 微信客户端扫码进入【小程序】
- 微信客户端,点击进入【H5】
- 支付宝客户端,扫码进入【H5】
- 浏览器或其他APP 扫码或直接打开【H5】
2. 逻辑
所有的入口,本质上都是通过下方链接跳转
https://www.sdtlpro.com/scanfood/wxService/getUrl?cid=ERSD16518
- 【微信小程序】在微信后台配置:扫码场景下,跳转小程序。在小程序内获取cid参数即码牌编号。
- 【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当为用户标识。
二、问题
- 怎么保证应用入口url中的extUsersID是中台传过来,而不是被篡改的?
- C端前后端通信,传的明文参数。比如获取订单列表,使用的是用户ID
- 怎么在效率和安全中,做权衡?
三、风险和效率
1. 风险点在哪
- 获取订单列表、订单详情时,会回传敏感信息(如下单时填写的手机号、姓名等)
- 非本人取消订单
- 使用余额支付(支付密码)
- 非本人获取会员信息
- 商品信息被爬
- 对现有功能的影响
2. 怎么规避
- 归根结底是没有权限机制,使用jwt+拦截器,在token中带上user_id、openid等信息,在须鉴权接口上使用注解做拦截。
3. 怎么提高效率
- 对于非敏感接口,无须校验token
四、整体登录流程
1. 现有的登录方式清单
- 微信小程序wx.login()获取openid(小程序的openid)
- H5通过中台接口,获取openid(公众号的openid)或userID (支付宝)
- 手机号+验证码登录(在有用户态的基础上,更新token,加入memberID)
所以我们说的登录,应该区分为:用户登录、会员登录