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

如何统一Blazor Server UI与外部API身份认证,优先采用Azure AD B2C方案

方案2(Azure AD B2C统一认证)落地指导

该方案完全可行,且是适配你场景的最优选择,既符合你把认证能力下沉到B2C的需求,也能同时兼容小型客户用UI、大型客户自行对接API的场景,基础实现步骤如下:

  • 先在你的Azure AD B2C租户中注册两个应用,分别对应Blazor Server前端和后端API
    • 注册API应用时,暴露自定义API作用域(比如user_access),后续所有访问API的请求都需要持有该作用域的授权
    • 注册Blazor Server应用时,配置合规的重定向、注销地址,同时给该应用授予上述API作用域的委托访问权限
  • 改造后端API的认证逻辑:替换原有用户名密码换JWT的逻辑,改为验证Azure AD B2C签发的JWT,仅需配置B2C租户域名、API应用客户端ID作为校验受众即可,原有JWT鉴权的业务逻辑不需要修改
  • 调整Blazor Server的B2C配置:在现有B2C登录配置基础上,开启访问令牌获取配置,用户完成B2C登录后,可直接从认证上下文拿到B2C签发的、有权限访问API的访问令牌
  • 把获取到的访问令牌注入到API请求链路:通过IHttpContextAccessor从当前用户会话中读取令牌,配合HttpClientFactory或者NSwag提供的请求头重写方法注入到请求的Authorization头即可,不需要自行维护令牌存储、刷新逻辑
  • 针对有自研能力的大客户:仅需向其提供B2C租户信息、API作用域、OAuth2.0认证端点,他们可直接通过B2C标准流程获取令牌调用API,不需要调整你侧的API逻辑
替代方案(会话内共享令牌的轻量实现)

如果暂时不打算统一用B2C做API认证,也可以通过Blazor Server原生机制实现会话内令牌共享,实现难度很低:

  • 自定义一个Scoped生命周期的令牌存储服务,Blazor Server每个用户会话对应独立的Scoped容器,天然隔离不同用户的令牌
  • 用户登录完成、从API拿到Bearer令牌后,将令牌存入上述Scoped服务中
  • 后续所有API调用直接从该Scoped服务中读取令牌注入请求头即可
  • 若SignalR连接断开重新登录,仅需在认证完成后重新将令牌存入Scoped服务即可,不需要额外做持久化处理
最优方案建议

优先选择Azure AD B2C统一认证方案,优势如下:

  • 无需自行维护用户密码存储、令牌签发、过期刷新、安全策略等逻辑,后续要加2FA、社交登录、密码复杂度策略等能力,直接在B2C后台配置即可,不需要修改业务代码
  • 一套认证逻辑同时覆盖UI用户和第三方对接场景,不需要做兼容性适配
  • 你现有Blazor侧已经完成了B2C的基础配置,改动量极小,API侧仅需替换JWT校验规则,原有业务代码完全不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:57:02