关于我不得不给国外开发者解释为什么我的 OAuth 登录会超时的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
moonrailgun

关于我不得不给国外开发者解释为什么我的 OAuth 登录会超时的问题

  •  1
     
  •   moonrailgun
    PRO
    moonrailgun 2023 年 7 月 12 日 3822 次点击
    这是一个创建于 1020 天前的主题,其中的信息可能已经有所发展或是发生改变。

    google 根本是不用想,github 还可以靠运气。

    8 条回复    2023-07-12 15:58:13 +08:00
    itechify
        1
    itechify  
    PRO
       2023 年 7 月 12 日 via Android
    tailchat 调用 github 或 google 的 oauth ,用 code 获取 access token ,然后调 api 获取用户信息进行登录绑定用户?其中被墙了是不是?
    moonrailgun
        2
    moonrailgun  
    OP
    PRO
       2023 年 7 月 12 日 via Android
    @oneisall8955 很懂嘛,是的。辣鸡 gfw
    SolarHurricane
        3
    SolarHurricane  
       2023 年 7 月 12 日
    借楼问下 OAuth 的问题。你图中的 repo 应用是通过 OAuth 的 OpenID Connect 实现第三方登录吗?能否给一下 repo 链接学习一下。

    另外,想问下 auth server ( github )的`/userinfo` endpoint 有什么用吗?我看获取的 ID Token 里,附带的信息和/userinfo 返回的一样?

    最后,如果只是通过 OAuth 做第三方登录的话,我的应用似乎只需要 ID Token ,不需要 access token/refresh token ?仅从 ID Token 我就可以完成新用户注册/老用户读取( authentication )。
    itechify
        4
    itechify  
    PRO
       2023 年 7 月 12 日   2
    我也遇到这个问题,由于工作原因,对接了很多国外第三方社媒平台。qa 环境在国内主机,被墙了,运维说 qa 环境因为历史原因不方便搭建 VPN 或代理。

    我是这样解决的:

    - 第三方 api 链接做成可配置的,也就是根据 dev/qa/pre/prod 环境配置
    - 搭建免费的 api 中转,(感谢 cloudflare 的免费 worker )最大的工作量在此。搭建类似 https://ghproxy.com 这样的加速服务。

    例如 api 原本是 https://oauth2.example.com/token
    搭配这个服务的加速链接为 https://ghproxy.com/https://oauth2.example.com/token
    这样原本被墙的 api 链接经过了服务进行了中转

    - 修改自己项目各个环境的 api ,按需加上前缀即可,例如 qa 环境在国内网络被墙就加上,生产环境在国外就保持原来的链接

    如何搭建? ghproxy 的项目对应的源码: https://github.com/hunshcn/gh-proxy

    原项目只能用于加速 github ,需要魔改源码,去除限制或添加上白名单即可,并且,可通过 cloudflare worker 免费搭建,只需要绑定一个未被墙的域名即可。

    按照 readme 指导 worker 版本搭建好后,可参考的修改如下,太长了粘贴在 pastebin: https://pastebin.com/h8E9gcyD
    itechify
        5
    itechify  
    PRO
       2023 年 7 月 12 日
    @oneisall8955 #4 这里 worker.js 主要添加了 checkCustomUrl 方法,并且使用 customProxyDomainArray 作为白名单,这是一个正则搜索,按需修改搭配使用即可
    moonrailgun
        6
    moonrailgun  
    OP
    PRO
       2023 年 7 月 12 日
    @SolarHurricane 我是按照自己理解做的第三方登录,通过重定向过来的 code 换取临时的 access token 再换取用户信息,用用户信息匹配用户进行登录(没有匹配则自动注册)。
    大致的操作就是达到一个通过第三方平台的 id 映射到自己平台的 id 实现一个无密码登录的操作。
    这里是相关的实现连接可供参考,如果我写的不是正经实现方案也欢迎指出讨论,我想了一圈应该是没有安全问题的
    https://github.com/msgbyte/tailchat/blob/master/server/plugins/com.msgbyte.iam/strategies/github.ts
    https://github.com/msgbyte/tailchat/blob/master/server/plugins/com.msgbyte.iam/services/iam.service.ts


    @oneisall8955 通过代理转发肯定能实现操作,但是我考虑到两点:
    - 如果用在正式服务上可靠性减半,因为增加了中间环节,而且还需要维护中转节点
    - 本来 https 可以保护数据不被篡改,中间加了一层以后出现了安全隐患。

    不过你这个方案我学会了,并且打算用一波。因为我后面还打算接入 google 登录。github 还时不时能脸上 google 就真的没办法直连了。感谢大佬分享
    SolarHurricane
        7
    SolarHurricane  
       2023 年 7 月 12 日
    @moonrailgun 感谢回复。看了下代码应该没问题。GitHub 的 OAuth 不支持 OpenID Connect ,所以只能先获取 access token 再获取用户信息。不过我好奇,让用户跳转到 Github 登录的时候,需要提供 scope(read, write 啥的),这个 scope 是在哪里定义的?你给的链接里好像没有。
    moonrailgun
        8
    moonrailgun  
    OP
    PRO
       2023 年 7 月 12 日
    @SolarHurricane 默认就是获取基础配置,如果要额外的可以再加
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     990 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 18:16 PVG 02:16 LAX 11:16 JFK 14:16
    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