我有一个网站,目前是通过路由做了 nat 映射,允许用户通过外网直接访问网站,用户也可以在内网通过访问公网的 IP 来访问这个网站。 现在我想添加一个限制: 用户如果是在外部网络(如果是通过 vpn 也认为是内网)访问这个 web 网站,检查数据库中该用户是否允许通过外网来访问网站,如果允许则放行,不允许则拒绝。
目前我是这样处理的:
1 ) web 后端添加一个 api /auth ,前端在 login 网站前先通过这个 api 的私有地址访问这个 api ,如果访问得到证明这个用户目前在内网,反之在外网。并且将 auth 返回的 token 记录在前端
2 )在执行 /login 的时候,将 token 携带到  login 的请求头, 后端收到这个请求头,如果含有这个 token 就可以判断用户是否在外网了

存在的问题:
由于访问 /auth  用的是私有地址,但访问 web 网站用的是公有 ip ,导致会涉及到跨域访问,目前 chrome 浏览器做了安全限制,需要将私有地址手动的添加到允许访问列表。 但是我们目前想让用户无感,最好用户什么都不需要操作。所以想请问下,是否有其它更好的方案,对用户使用无感的操作,当用户在访问 web 的时候就能准确知道用户是否在内外网,便于下一步的权限控制。
举报· 42 次点击
登录 注册 站外分享
2 条回复  
Latin 小成 2024-10-28 10:15:42
nginx 获取用户真实 ip 地址与服务器(内网公网) ip 地址校验
当客户真实 ip 地址和服务器(内网公网) ip 地址相同,此时客户在内网
是否可以这样
Vraw5 小成 2024-10-28 10:23:10
内网通过内网 IP 访问,外网通过外网 IP 访问,得到的来源 IP 不同,可以根据来源 IP 做限制。

内网将域名 DNS 解析成内网 IP ,这样来自内网的全部放过,无需判断。如果改不了,内网的出口 IP 一般是固定的,后端默认来自这个公网 IP 的为内网登录,全部放过。

非上述来源 IP 的,登录时判断是否允许外网登录
kiracyan 小成 2024-10-28 10:34:56
登陆时,访问一个内网 API ,验证成功就是内网,无法验证就是外网
返回顶部