google 根本是不用想,github 还可以靠运气。
1
oneisall8955 2023-07-12 01:04:42 +08:00 via Android
tailchat 调用 github 或 google 的 oauth ,用 code 获取 access token ,然后调 api 获取用户信息进行登录绑定用户?其中被墙了是不是?
|
2
moonrailgun OP @oneisall8955 很懂嘛,是的。辣鸡 gfw
|
3
SolarHurricane 2023-07-12 04:17:32 +08:00
借楼问下 OAuth 的问题。你图中的 repo 应用是通过 OAuth 的 OpenID Connect 实现第三方登录吗?能否给一下 repo 链接学习一下。
另外,想问下 auth server ( github )的`/userinfo` endpoint 有什么用吗?我看获取的 ID Token 里,附带的信息和/userinfo 返回的一样? 最后,如果只是通过 OAuth 做第三方登录的话,我的应用似乎只需要 ID Token ,不需要 access token/refresh token ?仅从 ID Token 我就可以完成新用户注册/老用户读取( authentication )。 |
4
oneisall8955 2023-07-12 10:37:27 +08:00 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 |
5
oneisall8955 2023-07-12 10:41:13 +08:00
@oneisall8955 #4 这里 worker.js 主要添加了 checkCustomUrl 方法,并且使用 customProxyDomainArray 作为白名单,这是一个正则搜索,按需修改搭配使用即可
|
6
moonrailgun OP @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 就真的没办法直连了。感谢大佬分享 |
7
SolarHurricane 2023-07-12 15:08:11 +08:00
@moonrailgun 感谢回复。看了下代码应该没问题。GitHub 的 OAuth 不支持 OpenID Connect ,所以只能先获取 access token 再获取用户信息。不过我好奇,让用户跳转到 Github 登录的时候,需要提供 scope(read, write 啥的),这个 scope 是在哪里定义的?你给的链接里好像没有。
|
8
moonrailgun OP @SolarHurricane 默认就是获取基础配置,如果要额外的可以再加
|