把网站改造了一下,加入了 OAuth 登录,讨论下关于普通用户系统加入 OAuth 的问题

2019-02-03 09:55:34 +08:00
 KasuganoSoras

昨晚爆肝了一下,给自己的网站加上了 Github OAuth 登录。

现在可以通过 Github 账号登录了: https://www.natfrp.org/

登录时点击左下角的基佬猫图标即可登录,无需手动设置账号、邮箱和密码。


关于将普通用户系统改造加入 OAuth,我是这样做的:

  1. 因为我比较懒,不想再单独开个邮箱绑定页面,所以做了个判断,如果通过 Github OAuth 登录的用户没有 public email (即用户资料的 email 为 null ),就不允许注册
  2. 将 OAuth 用户的密码设置为 NULL,这样用户只能通过 OAuth 登录,因为系统做了判断,常规渠道无法通过空密码登录;用户也不能修改密码,因为旧密码不允许为空。

现在虽然没啥问题,但是感觉还是不太完善。。而且这个设计只能 Github 登录,并不是真正的 OAuth 兼容。

想问一下这种设计会有什么安全漏洞之类的吗?各位 V 友在处理 OAuth 登录的用户这方面有没有什么更好的办法呢?

谢谢

2782 次点击
所在节点    程序员
8 条回复
henglinli
2019-02-03 10:45:25 +08:00
关于 public email 的问题,记得之前的 github 会提供一个 no replay 的伪邮件地址,现在不可选了,只能是 null。我目前特意将其设置为空。即使这样,我使用 github 账号登录 travis 也是没有问题的。按照你的说法,我的账号估计无法登录你的系统。有必要的话,你可以测试下这种情况。
alvin666
2019-02-03 10:49:09 +08:00
我见过的网站里面,有的是强制 oauth 登陆以后再强制绑邮箱的,也有的是直接给你获取到的邮箱发邮件激活,也有的直接能用,要密码登陆得设密码
我感觉都行,多和别人聊聊 /小黄鸭确定没有漏洞就行,一个人可能想的不完善
KasuganoSoras
2019-02-03 10:49:10 +08:00
@henglinli #1 这个是因为邮箱是找回账号密码的唯一途径……所以我要求用户一定要提供一个真实有效的邮箱地址,在忘记密码的情况下只有通过邮箱找回,并且邮箱是不可修改的。
henglinli
2019-02-03 10:58:24 +08:00
@KasuganoSoras 正好说到找回账号功能。我之前有忘记 github 密码的情况,github 提示我的密码不安全,有被撞库的风险。我就改了密码,恰好用的 chrome 自己生成的密码,遗憾的是我喜欢折腾,该密码未同步 chromebook 就被我重置了。之后发邮件给 GitHub 支持,他告诉我我还有一把 ssh key,后来从退役的本本上找到了这个 key,通过这个 key 把账号找回来了。找好所有权认定的方法有很多,我认为 ssh key 的方法很好。
既然你喜欢折腾,建议支持 fido https://fidoalliance.org/
henglinli
2019-02-03 11:06:48 +08:00
关于支持网络安全法已经反恐法:建议内置一个能获得所有账号所有权的内部邮件地址。
为了更好的保护用户数据,实现账号删除功能是应该并且迫切的。至于保存规定时间的问题,我对数据库不熟悉,不过数据库应该有类似的功能实现,估计给个时间戳就可以了。(我在 GitHub 上看到过介绍中还有” time xxx “相关的数据库。)
imbushuo
2019-02-03 11:10:06 +08:00
不同的 IdP 发回来的 claim 当然也是不一样的,一般用固定的那个,比如 Active Directory 和 AAD 里一般用 Object ID 或者 UPN 都行

我一般会存一下用户过来的 IdP 信息,甚至把本地登录也会拆成 SP + IdP (相当于自己也有一个 STS ),这样服务侧只需要接入 OAuth/OpenID Connect/SAML/WS-Trust 而不关心细节
zanzhz1101
2019-02-03 14:29:06 +08:00
522,你服务器挂了
KasuganoSoras
2019-02-03 14:57:24 +08:00
@zanzhz1101 #7 刚刚把谷歌云结算账号删了重新激活,居然成功了,又白嫖了 $300
所以网站临时挂了一会儿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX