App 里用第三方登录,在服务器端怎么做验证? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fengchang
V2EX    程序员

App 里用第三方登录,在服务器端怎么做验证?

  •  
  •   fengchang 2015-02-11 14:02:23 +08:00 26735 次点击
    这是一个创建于 3982 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,App里用友盟的SDK做第三方登录,支持微博,微信,QQ,豆瓣等等,获取到uid和access token传给我。

    我在服务端想验证uid的真伪,友盟没有服务端的接口,要自己一家一家做觉得有点麻烦,有没有开源的实现?

    26 条回复    2017-05-29 00:18:52 +08:00
    hging
        1
    hging  
       2015-02-11 14:13:08 +08:00
    没有. 验证他干啥....传给你什么就是什么就认为已经登录过就好了啊. 验证是APP端做的
    fengchang
        2
    fengchang  
    OP
       2015-02-11 14:35:26 +08:00
    @hging 当然是为了安全,如果不做验证的话,别人只要修改客户端或者HTTP连接中的uid就可以冒充其它用户了
    kslr
        3
    kslr  
       2015-02-11 14:38:57 +08:00
    你需要了解Oath2
    qiayue
        4
    qiayue  
    PRO
       2015-02-11 14:39:12 +08:00
    @fengchang 所以你的 api 本身需要对信息做验证,以确保中途被人截获的请求修改参数是无效的
    如果真的想要验证 uid 那么只能是一家一家去做
    kslr
        5
    kslr  
       2015-02-11 14:41:24 +08:00
    打错了,oauth2 accesstoken本身就是一个令牌
    hyzjshwo
        6
    hyzjshwo  
       2015-02-11 14:42:10 +08:00
    那是你和app的事了,和第三方没关系,第三方只是告诉你的app:ok ,验证通过,你的uid是xxx,头像是xxx,性别:o
    fengchang
        7
    fengchang/a>  
    OP
       2015-02-11 14:58:14 +08:00
    @kslr 我了解一点OAuth2,在这里的access token的Resource server是第三方服务器,拿着这个去转发新浪微博或者发朋友圈是安全的,因为Resource server可以向Authorization server验证token。但是对于我的服务器来说,如果不对token做验证,那谈何安全?
    kslr
        8
    kslr  
       2015-02-11 15:53:54 +08:00
    @fengchang 在你的APP上也做Token
    fengchang
        9
    fengchang  
    OP
       2015-02-11 16:31:09 +08:00
    @kslr 算了,感觉你也没做过。我的App里当然有自己的token。我自己系统的账号可以在数据库里验证密码,第三方的系统只能请求别人的服务器做验证。第三方平台也都提供了这个接口,比如
    http://open.weibo.com/wiki/Oauth2/get_token_info
    http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html#.E9.99.84.EF.BC.9A.E6.A3.80.E9.AA.8C.E6.8E.88.E6.9D.83.E5.87.AD.E8.AF.81.EF.BC.88access_token.EF.BC.89.E6.98.AF.E5.90.A6.E6.9C.89.E6.95.88
    我只想找个集成好的实现以免重复写代码,没想到这么多人跳出来告诉我不需要验证,现在程序员的安全意识真是呵呵了。
    jeansfish
        10
    jeansfish  
       2015-02-11 16:48:19 +08:00
    那你要找集成在服务器的oauth实现
    yuezhimsolo
        11
    yuezhimsolo  
       2015-02-11 17:00:31 +08:00
    我靠,文档你不看,github你不查,开源中国你不读。。。。。
    fengchang
        12
    fengchang  
    OP
       2015-02-11 17:37:31 +08:00
    @yuezhimsolo 查了,没找到,能给个链接吗?
    jsq2627
        13
    jsq2627  
       2015-02-11 20:29:04 +08:00
    自己实现一下吧 = = 第三方登录总共也就那么几家而已。
    服务端语言是啥?
    hahastudio
        14
    hahastudio  
       2015-02-11 20:54:11 +08:00   1
    原来还有人不验证= =自己玩大概不用验证,做成产品就得有了吧= =

    没用过友盟,没用过国产第三方登录服务= =
    就简单地搜了一下,看到了一些人的学习笔记,例如:
    http://blog.csdn.net/arthurchenjs/article/details/6567563

    感觉你就别想着找开源实现了= =自己做吧= =
    pubby
        15
    pubby  
       2015-02-11 22:02:53 +08:00
    后台拿access_token再去获取一下用户信息比对一下

    主要也就QQ 微信 微博 , 主要还是微信和QQ, 微博登录数差了个数量级,其它的估计量更小了


    另外提一下:
    QQ那个有点坑,你拿app上得到access_token在服务端取信息,有一定概率拿到的用户信息是"qzuser",没头像,没信息

    猜测是因为你app和服务器ip不同,导致连接了qq不同的服务器,而qq集群间数据同步方面偶尔抽风,瞎猜,反正我没解决 -_- ,这种情况只好直接拿APP得到的userinfo来用。
    046569
        16
    046569  
       2015-02-11 22:07:47 +08:00
    @pubby
    若用户拒绝授权,你就会拿到 qzuser .
    pubby
        17
    pubby  
       2015-02-11 22:27:22 +08:00
    @046569 授权了,在APP上能拿到
    jeansfish
        18
    jeansfish  
       2015-02-11 22:30:18 +08:00
    @fengchang

    https://github.com/jeansfish/RFC6749.zh-cn

    打个广告。服务器自己实现?
    gongweixin1990
        19
    gongweixin1990  
       2015-02-12 11:36:37 +08:00
    没什么验证的必要吧,uid和accessToken都是QQ、微博那边传过来的,你那边要验证就只能自己又重新在微博那边走一遍Oauth
    fengchang
        20
    fengchang  
    OP
       2015-02-12 21:22:49 +08:00
    @gongweixin1990 怎么会没必要呢?
    比如某个大V用微博登录了知乎。我上微博看一下大V的页面就能拿到大V的uid,然后再自己编造一个accessToken,发给知乎的服务器,知乎的服务器如果不再去微博验证accessToken,相信了这个uid,这样我不就登录到他的知乎号上了吗?
    dadou
        21
    dadou  
       2015-02-20 02:30:30 +08:00
    @fengchang 你好,问题解决的怎么样了?刚开始做 App,到第三方登录我也想不通了,是在自己的服务端单独验证 token 的吗?
    fengchang
        22
    fengchang  
    OP
       2015-02-25 17:05:36 +08:00
    @dadou 是的,我是在服务端再请求一次第三方服务器做认证,代码量其实不大,不同平台就是url不同。
    在QQ开放平台的文档里看到一段关于登录态验证的必要性的解释,你可以看一下。

    http://wiki.open.qq.com/wiki/%E6%8A%80%E6%9C%AF%E4%BC%98%E5%8C%96%E5%8E%9F%E5%88%99

    第1.3节
    denghongcai
        23
    denghongcai  
       2015-04-27 18:17:14 +08:00
    挖个坟,居然还有说不需要验证的,真是有意思
    lito
        24
    lito  
       2015-05-04 17:01:46 +08:00
    我想说,不是可以通过 accessToken通过第三方的api获取到用户的uid吗?然后再对比Uid是否相同!这样算验证吗?
    另外,想问下lz!当用户第二次启动app的时候,客户端给你传什么值?
    wcp1231
        25
    wcp1231  
       2015-06-03 20:20:03 +08:00
    @lito qq 和 微信的 uid 应该是每个应用不一样且不可遍历的,所以应该可以。但是微博的 uid 就是直接在 浏览器里能看到的数字 http://weibo.com/u/xxxxxx ,这样就危险了。。
    sheepsheep
        26
    sheepsheep  
       2017-05-29 00:18:52 +08:00
    我自己做了一个关于登录校验的 Java 版本,在 github 上,大家可以参考一下。技术不行,还要向大家多学习
    https://github.com/elsheep/thirdpartylogin
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5571 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 03:00 PVG 11:00 LAX 19:00 JFK 22:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86