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

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

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

各位有什么思路吗。
6058 次点击
所在节点    程序员
45 条回复
zpfhbyx
2024-08-06 11:55:32 +08:00
加 key 最简单了
libook
2024-08-06 12:08:01 +08:00
用密码管理器,一个服务一个密码也无所谓。

主要是并不是所有服务都支持一样的统一单点登录技术。
Puteulanus
2024-08-06 12:40:56 +08:00
感觉你想要的可能是 Auth0

类似你说的 oauth 登录接口,不过它整合了常见登录方式和一些第三方登陆

登陆跳回来的 callback 是 jwt ,你自己这边简单做一下 jwt 的验证就行了。我是用的 Nginx 的 ngx_http_auth_jwt_module 模块在中间做一个验证网关,对需要控制访问的 web 服务转接一下 https://github.com/puteulanus/nal ,服务那边就基本上无感了

我一般会开 GitHub 登陆和 email 登陆,email 我记得是邮件验证码吧,太久了印象不深了,magic link 那种不知道它有没有。Auth0 还是挺有名的服务的,OpenAI 的登陆就是用的它
henix
2024-08-06 12:56:12 +08:00
https (自签证书) + http basic auth
opengps
2024-08-06 12:57:44 +08:00
密码我都懒得用,我就是一个自己才知道的 url ,带上自己定制规律的入参才能打开,越是这种自定义的规则,黑客越猜不到
tool2dx
2024-08-06 13:00:15 +08:00
我是自己套用 RPC 协议加密,因为可以远程执行命令,我怕被别人抓包,只能加密。

加密相当于鉴权了。
iLtc
2024-08-06 13:02:44 +08:00
我目前是 用户名 + TOTP + reCAPTCHA ,应该能防止暴力破解。

最近在考虑要不要换成 Passkey 。
nosmile
2024-08-06 13:04:39 +08:00
IP 白名单,后面准备写个脚本,在新的地点一键放通
bobryjosin
2024-08-06 13:09:54 +08:00
cloudflare zero trust ,tunnel 绑个域名走 github 认证,点一下就能过了,自用的服务都 wireguard 组网,直接用内网 ip 访问。
totoro625
2024-08-06 13:12:08 +08:00
直接就是 IP 鉴权
访问一个特定服务器的 URL 记录访问 IP ,通过 ddns 传递 IP 到域名,其他服务器定时拉取 IP 解析并放行,隔一段时间删除该 IP
echoless
2024-08-06 13:12:50 +08:00
totoro625
2024-08-06 13:13:43 +08:00
@nosmile #28 期待一下,特别需要
我自用的方案有延迟,不太行
zsh2517
2024-08-06 13:54:53 +08:00
目前公网统一的入口,走 nginx + Basic Auth 转发到内网里面的一个 Nginx Proxy Manager ,它再分发到具体服务上。
内网里面基本没有鉴权(有通常也是弱密码)。只有极个别服务是强密码验证(比如 pve 的 web UI )

---
目前个别服务(支持 OAuth2/OpenID 登录的),接入了 GitLab 作为第三方登录。
后面计划改成每个服务均绑定 127.0.0.1 ,然后前面套一个轻量的鉴权网关(可能支持 oauth/passkey/password 三种验证)。但是懒得写又没找到合适的开源项目( 天天在 V2EX 打广告的 casdoor 似乎可能满足需求,但是之前部署过一次文档质量有点差),就一直咕咕咕了
zsh2517
2024-08-06 13:55:34 +08:00
@zsh2517 都是 web 服务( http, https, ws, wss )。对于 tcp/udp 类的我没太考虑过
WashFreshFresh
2024-08-06 13:56:53 +08:00
@zsh2517 sa-token 到还可以,你说的都支持。
wbrobot
2024-08-06 14:16:40 +08:00
直接前端生成个浏览器指纹当 uuid ,设置个 password 就行了。
wbrobot
2024-08-06 14:18:04 +08:00
@wbrobot 我的一个站 https://9898555.com 就是用前端浏览器指纹当 uuid ,弱绑定用户
beyondstars
2024-08-06 15:21:55 +08:00
1. 自用服务部署在内网(或者虚拟局域网),透过 wg, ssh 等加密隧道软件进行连接。
2. 自签 ssl 证书 + http basic auth;
3. Cloudflare tunnel (只是一个想法,没试过);
4. 对接 3rd party auth api 太麻烦了(再简单的 3rd party auth 对接也远不如写几行配置,敲几行命令简单)。
beyondstars
2024-08-06 15:23:54 +08:00
补充一个:

5. 部署在自有 k8s 集群的可以用 client cert + kubectl port-forward + clusterip service 的方式安全访问。
PerFectTime
2024-08-06 15:59:35 +08:00
caddy + caddy-security 模块 + github oauth

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

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

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

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

© 2021 V2EX