You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6多Web API跨项目调用认证方案咨询

.NET 6 内部WebAPI项目间调用认证最优实现方案

这个场景属于内网桌面客户端+服务间调用的混合场景,不要上过重的公网身份认证组件,优先选改造成本低、安全边界清晰、维护成本低的实现,具体落地逻辑如下:

核心选型:双策略JWT认证(用户登录/服务调用分离)

完全复用项目A现有登录认证体系,不做重构,新增独立的服务调用认证分支,和原有用户登录逻辑并行不冲突,不需要给项目B单独搭建登录模块。


具体实现步骤

  • 项目A侧改造(认证提供方)
    1. 复用现有LiteDB实例,新建InternalAppCredential集合,存储分配给项目B的凭证:主键为固定AppId,AppSecret存储加盐SHA256哈希值(绝对不要存明文),额外记录允许访问的内网IP段。
    2. 在Program.cs的JWT认证配置中新增独立授权策略,命名为InternalServiceAccess,专门校验服务调用签发的JWT,原有前端用户登录的校验逻辑完全保留,两套策略互不干扰。
    3. 新增一个无认证的凭证换发接口/api/auth/internal/token,逻辑为:接收请求传入的AppId、AppSecret、请求源IP,首先校验IP是否在对应AppId的白名单内,再校验AppSecret哈希值是否匹配,校验通过后签发有效期15分钟的短期JWT,JWT内仅写入appType=ProjectB、scope=allowed_biz_api两个必要声明,不携带任何用户敏感信息,权限范围仅限B需要调用的业务接口,不开放全量接口访问权限。
    4. 所有给B开放的接口统一加[Authorize(Policy = "InternalServiceAccess")]特性,和普通用户接口做权限隔离,同时单独留存服务调用日志(调用IP、时间、接口、返回码)到LiteDB,方便溯源。
  • 项目B侧改造(调用方,搭配Electron适配)
    1. 不需要搭建独立登录体系,将分配到的AppId、AppSecret加密存储在Electron主进程配置中,绝对不要硬编码到Vue渲染层的JS代码里,渲染进程需要获取凭证时通过IPC和主进程通信,避免打包后前端代码被反编译泄露凭证。
    2. B启动时首先调用A的换发接口拿到短期JWT,存储在应用内存中(不要写入本地持久化文件),后续所有调用A接口的请求,都在Header中携带Authorization: Bearer {token}。
    3. 加本地自动续期逻辑:每次发起请求前检查Token剩余有效期,不足3分钟时自动重新调用换发接口获取新Token,全程不需要用户感知。
  • 轻量化安全加固(适配内网场景)
    1. A侧的内部Token换发接口、所有服务专属接口,都加IP白名单校验,仅允许B所在的固定内网IP访问,就算凭证意外泄露,非白名单IP也无法调用。
    2. 服务调用JWT的签名密钥定期轮换(比如每3个月换一次),轮换时提前更新B的配置即可,不需要停服。
    3. 接口请求加时间戳校验,B发起请求时携带当前时间戳,A侧校验时间戳和服务器时间差超过5分钟的请求直接拒绝,防重放攻击。

不推荐其他方案的原因

  • 直接传固定API Key:Key长期有效,一旦泄露没有失效机制,安全风险高
  • 部署IdentityServer/OAuth2全套服务:两个轻量内部项目上这套架构维护成本太高,属于过度设计
  • Windows域集成认证:对跨设备、跨系统环境适配差,Electron端兼容坑多,不适合桌面打包场景

这个方案整体改造量不超过2人日,完全兼容现有技术栈,不需要引入新的第三方依赖,后续如果B需要新增用户登录能力,直接在现有服务认证逻辑上叠加用户声明即可,不需要重构。

内容的提问来源于stack exchange,提问作者Khyati Desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:27:28