大家是怎么对自用的服务做鉴权的

98 天前
 Inzufu
比如网站的后台,图床的上传页和一些小 API 接口。
最常用的应该是密码,但是一个服务一个密码感觉体验很不好,管理起来也麻烦。
用过钉钉、飞书、slack 等服务的 oauth 登录接口,实现起来挺简单,但感觉还不算是最佳实践。

我能想到的:
1:邮箱验证码登录,实现起来可能稍微有点麻烦。
2:webauthn 用手机或者安全密钥登录,但我还没研究明白。
3:TOTP (基于时间的验证码),但是如果单用一个六位数的数字做鉴权是否不太安全。
问题是这三种只是单次认证的方法,要做持久化会话就得几乎从头写一个鉴权系统,有点为了醋包饺子的感觉。

各位有什么思路吗。
4993 次点击
所在节点    程序员
45 条回复
ZztGqk
98 天前
passkey 我就在用 passkey
zsh2517
98 天前
@WashFreshFresh #35 看了一下,项目本身似乎挺不错的。可惜我不写 Java ,而且需求似乎对不上 😂

目前的思路大概是:选择一个可信的 OAuth2 ( OpenID Connect ) 三方平台。然后 golang (无运行时依赖)实现一个轻量、单文件(方便部署)的反向代理。未登录时强制 OIDC 登录。登录后在白名单的用户反向代理,不在白名单的用户 403 Forbidden 。这样就可以很简单地实现认证后访问。

目前已经跑通流程了,但是反代代码是 GPT 写的,能跑但是还没仔细读,不知道有没有 bug 。

后期可能(但不一定)会把 OAuth2 的提供者换成 keycloak 之类的专门的服务;以及解决配置文件分发的问题(几台虚拟机,十几个服务)
zsh2517
98 天前
@zsh2517 #40 提到的 caddy-security 看起来能满足反向代理的要求。看具体需要吧

如果要把反向代理仅作为外网入口的鉴权,那么一台服务器跑反向代理,其他走内网访问就行。
不过我希望的是每个机器上的服务在内网也无法直接访问。这个时候可能需要每台设备跑一个反代了
zsh2517
98 天前
@zsh2517 补充一下内网的安全性问题。一般来说 homelab 应该可以把内网看作可信的。
主要我这边跑了一个帕鲁服、一个 QQ Bot 和一些其他东西,没有做隔离而且不止我一个人能登录 VM 。
短期没心情重新调整网络,所以想直接在每个服务上授权验证(虽然 OAuth2 不至于说完全无感,但是每隔一段时间的首次访问自动跳转一下、大部分时候无感,还是能接受的)
8355
97 天前
api 的话自用 header token 写死复杂加密值
适用于复杂路径

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

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

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

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

© 2021 V2EX