一个内部系统,但是部署在公网上的,用户都是用 chrome 访问,基于安全性考虑加 IP 访问限制,但是有些用户没有固定公网 ip 或者甚至可能有移动设备访问。
有没有什么办法像 app 那样取到设备信息呢,加设备白名单限制访问

非常感谢各位的回复,我就不一一回复了。

现在是加了账密+二次验证的,但是还是觉得不够安全,所以想看看能不能加类似设备白名单的功能

目前想到了一种方案:首次登录的时候服务端下发一个类似 token 的东西,将这个 token 存在本地,这个就相当于设备的唯一标识了,给这个设备加了白名单了

UA 吗。。。 随便伪造
最好是借助一些外部系统跳转做 sso ,类似钉钉/飞书登陆,其实你的核心诉求是鉴权用户而不是鉴权设备。
合法用户的所有设备都可用才对

http 请求是可以自己构造的,设备信息不靠谱,加个 auth 模块吧

如果 nginx 之类的能限制 MAC 地址就好了。

我之前翻了一圈,希望能在云服务器限制 mac 地址,结果没什么好的办法。

既然都是浏览器访问,考虑一下浏览器指纹,使用一些成熟的浏览器指纹库,基本不管你 IP 和 浏览器头部做一些变化都能独立识别用户。

比如这个 js 库的 demo
fingerprint.com/demo/

不可能的,除非你在应用层获取 mac

套一层 VPN ,VPN 服务器固定 IP ,只允许 VPN 服务器 IP 访问

加个登陆验证?

上面老哥说的浏览器指纹可以考虑下

内部系统不需要用户登录的吗?如果需要,就是登录验证、二次验证等的解决方案。如果不需要登录,可以考虑颁发证书的形式。

可以用双向证书

看你是防君子还是防小人,结果上来说就是小人防不住。

搭建个 vpn 吧,要么用 openvpn ,要么用 tailscale ,这样安全性会高很多

浏览器指纹只能作为辅助识别用户的手段,不能作为唯一识别用户的手段,你可以看到任何指纹库其准确率都到不了 100%,哪怕是你发的这个 npm 文档上也写了准确率为 40%至 60%

这种需求加个 auth 模块吧,接入微信钉钉飞书就行

要求 SSO 。设备纳入 MDM ,加证书登录。或者类似 Cloudflare ZeroTrust 这样的方案。

如果用户都在一个或几个固定的网络里,用内网的防火墙解决问题

你需要的是 SSO+Device Enrollment ,例如 MS 的 Intune

mac 地址只在局域网有效,出了网关看到的就都是网关的 mac 地址了,你这个不可能实现的,除非你自己实现应用端和服务端,把 mac 地址封装到数据载荷里

搞个账号不好吗

套一层 webvpn 内部系统只允许通过 webvpn 访问,webvpn 不逊用户额外装什么软件 直接用浏览器访问

天啊,这问题不就是我年前遇到的。web 在公网,但是只给公司内部用。ip 是变化的。
想了一圈,最后闲着无聊写了个 chrome 插件,请求接口的时候追加 auth 鉴权

客户端证书,或者 http basic auth ,用户名+密码就相当于 token

弄个 web 界面,让他们访问之前点击相应的链接把 IP 添加到白名单内,再访问这个系统

cloudflare Zero Trust

看了你的补充,我也补充下。
chrome 插件首次安装后生产一个 guid 缓存到本地,然后后台加白名单和权限,然后请求接口的时候把 guid 加密放到 auth 。
这样应该安全吧?

#27 也有问题。 就像他们说的防君子不防小人,要是有人拿到这个 guid ,直接加到别的设备里,那就相当于新增设备了

内部泄露那没办法了。你给他账号密码他一样给别人。我目前这样实现了。目前测试观察阶段很稳定。我目前弊端是要刷新才会生产新的 auth ,后期可能会考虑登录后的状态有效期给长一点来解决。
如果你有了好的解决方案,麻烦踢下我!

试试 mtls 吧,或者基于 FIDO 的设备 passkey

#29 嗯嗯