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

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

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

    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  
       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  
    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   ·   我们的愿景   ·   实用小工具   ·   3852 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:32 · PVG 12:32 · LAX 21:32 · JFK 00:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.