ASP.NET Core公网站点如何通过内网站点新增用户的方案咨询
原有思路的问题分析
- 仅依赖CORS限制API访问的方案完全不可行:CORS只是浏览器层面的同源策略限制,无法阻挡curl、Postman等非浏览器客户端直接调用接口,根本达不到防护效果,必然无法通过渗透测试。
- 直接通过EF操作AspNetUsers表的方案不推荐:不符合ASP.NET Identity的设计规范,手动改表很容易遗漏用户角色、声明、密码哈希规则等关联逻辑,后续Identity原生API调用会出现兼容性问题,同时公网数据库直接向内网开放写入权限也会大幅扩大攻击面,不符合安全规范。
推荐解决方案
方案1:API+服务级认证(改造成本最低)
站点A的用户创建接口不面向普通用户开放,仅针对站点B做专门的服务级认证,防护措施包括:
- 给站点B单独生成高复杂度的专属API Key,存储在双方的安全配置项中(禁止硬编码),站点B请求接口时在Header中携带API Key,站点A通过中间件统一校验Key的合法性
- 额外增加站点B出口IP的白名单限制,仅允许白名单IP访问该接口
- 可选增加请求签名、请求有效期校验,避免重放攻击
该方案安全性足够通过渗透测试,且改造成本极低。如果需要更高安全等级,可以把API Key替换为双向TLS客户端证书认证。
方案2:内网同步服务(安全性最高)
如果不想在公网站点暴露任何管理类API,可以在内网部署独立的用户同步服务:
- 同步服务同时对接站点B的AD和站点A的Identity数据库,数据库账号仅授予用户创建相关的最小权限
- 所有用户创建逻辑调用ASP.NET Identity原生的
UserManager.CreateAsync方法实现,不直接操作数据表,保证数据完整性 - 触发方式可选择站点B创建用户后主动触发同步,或者定时拉取AD新增用户同步到站点A
全程公网不需要暴露额外接口,适合安全要求极高的场景。
注意事项
不要跨网络传输明文密码,若需要同步账号密码,可选择两边哈希算法对齐,或者引导用户首次登录站点A时重置密码。
内容的提问来源于stack exchange,提问作者ove
相关产品推荐
相关产品推荐

