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

全栈应用(React.js+ASP.Net Core)基于角色的Active Directory身份认证与授权

完整实现方案

前端React + MSAL 对接逻辑

  • 首先安装依赖包:npm install @azure/msal-react @azure/msal-browser
  • 配置MSAL实例:clientId填AD中注册的前端应用ID,authority填企业AD租户地址(本地AD则填AD FS地址),redirectUri配置为前端应用的访问地址
  • 项目根组件用MsalProvider包裹,登录操作调用loginPopup或loginRedirect方法,登录成功后获取访问令牌,后续所有向后端发起的请求都在请求头携带Authorization: Bearer ${accessToken}
  • 注意申请的访问令牌scope必须是后端API在AD中暴露的自定义scope,不能使用默认的Graph接口scope

后端ASP.NET Core Web API 配置

  • 安装对应NuGet包:Microsoft.AspNetCore.Authentication.JwtBearer
  • 在Program.cs中添加JWT认证服务配置,Authority与前端配置保持一致,Audience填后端API在AD中注册的应用ID,框架会自动完成令牌的签名、过期、发行方校验,校验通过后用户的身份声明会自动填充到HttpContext.User中,无需手动解码令牌
  • 如需提取用户的核心身份标识,可直接从HttpContext.User.Claims中获取,常用的声明包括用户主体名(UPN)、AD全局唯一对象ID等

会话记录存储实现

  • 自定义一个请求中间件,注册顺序放在认证中间件之后、授权中间件之前
  • 中间件逻辑:当请求通过认证后,提取用户的AD对象ID、请求时间、客户端IP、访问接口路径、令牌过期时间等信息,写入业务数据库的会话表即可,不要存储完整明文令牌,可存令牌哈希值作为唯一标识避免敏感信息泄露

数据库角色权限控制实现

  • 数据库层面先建立三张核心表:用户表(存储用户AD对象ID、姓名、邮箱等基础信息,以AD对象ID为唯一关联键)、角色表(存储角色ID、角色名称、权限描述)、用户角色关联表(关联用户ID和角色ID,如需细粒度接口权限可额外补充角色权限关联表)
  • 自定义授权规则:继承IAuthorizationRequirement创建自定义权限要求,继承AuthorizationHandler<YourRequirement>实现权限校验逻辑,在Handler中通过HttpContext.User拿到用户AD对象ID,查询数据库获取用户关联的所有角色,判断是否满足当前接口的访问权限
  • 在Program.cs中注册自定义授权策略,在需要控制权限的接口上添加[Authorize(Policy = "你的策略名称")]注解即可生效

最小验证示例搭建步骤

你可以按以下流程快速跑通全流程验证逻辑:

  1. 在企业AD中注册两个应用,分别对应前端SPA和后端API,给前端应用开放访问后端API的scope权限
  2. 用脚手架创建React项目,配置MSAL完成登录逻辑,编写测试请求向后端发送带令牌的请求
  3. 用脚手架创建ASP.NET Core Web API项目,配置JWT认证,添加测试接口,接入会话存储中间件和自定义授权策略
  4. 依次验证登录流程连通性、权限控制规则有效性、会话数据写入是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:09:05