V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjmdp
V2EX  ›  程序员

App 只支持微信和手机号登录,前后端通过 REST API 通信,如何设计相对安全可靠的鉴权流程?

  •  
  •   zjmdp · 2015-01-09 13:57:00 +08:00 · 5552 次点击
    这是一个创建于 3599 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前设想的是为每一个用户生成一个uid,并绑定微信的openid和手机号,用户可使用微信oauth登录,或者使用手机号验证码的形式登录,后台记录uid, openid, mobile_number的对应关系。整个流程没有密码的概念。

    基于以上的假设,如何设计一套安全的鉴权流程?求各位大神指点
    8 条回复    2015-01-09 15:43:25 +08:00
    zjmdp
        1
    zjmdp  
    OP
       2015-01-09 14:29:34 +08:00
    如果基于token的授权体系,微信oauth登录后可以拿openid去换token,那手机总不能拿手机号把?不管拿openid和手机号换token,都不太安全。
    abelyao
        2
    abelyao  
       2015-01-09 14:37:00 +08:00
    在 APP 中加入 “使用微信登录” 就好咯。
    至于手机号码,只有手机号码去登录肯定是不行的,如果我的朋友也在使用这个 APP 我知道他的手机号码,岂不是可以互相登录?除非是手机号码+短信验证码来登录,这样太蛋疼了
    beordle
        3
    beordle  
       2015-01-09 14:52:24 +08:00
    @abelyao 不一定的,我們通過設備號和一些隨機參數可以設定一個虛擬的密碼,當然只有短信是最終的用戶驗證手段,為了避免每次都要短信驗證,我們可以:
    把默認密碼保存,我們每次就驗證是否一致就好咯(當然你要基於 token)
    只要每次短信驗證 相當於重置這些密碼就好
    zjmdp
        4
    zjmdp  
    OP
       2015-01-09 15:11:34 +08:00
    @abelyao
    @beordle
    是否可以这样呢?
    手机验证的话可以在验证成功后直接返回token,这个token一直有效,直到用户登出或者重新登录
    微信登录的话终端拿到微信的access token后传给后台,app的后台去微信的后台验证access token是否有效,如果有效再返回token
    beordle
        5
    beordle  
       2015-01-09 15:29:42 +08:00
    恩,不過token 一定要加上設備的id然後付個md5防止篡改
    zjmdp
        6
    zjmdp  
    OP
       2015-01-09 15:36:58 +08:00
    @beordle 不是很明白?token由服务器生成,如果被篡改了请求就是无效的呀
    clino
        7
    clino  
       2015-01-09 15:40:58 +08:00
    @zjmdp 看起来手机只有短信验证码才行吧
    zjmdp
        8
    zjmdp  
    OP
       2015-01-09 15:43:25 +08:00
    @clino 嗯,想着就是将验证码作为token下发的凭证
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2889 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:16 · PVG 08:16 · LAX 16:16 · JFK 19:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.