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

基于IdentityServer4的Azure多VM应用故障:VM1切换至VM2异常

跨Azure VM部署应用的身份认证切换异常问题排查

问题描述

Web应用部署在Azure两台虚拟机(VM)上,前端配置Application Gateway做负载均衡,出现不对称的切换异常:

  • 从VM2登录后停掉VM2,请求自动重定向到VM1,用户无感知,业务正常
  • 从VM1登录后停掉VM1,用户被强制登出并跳转至VM2登录页;输入凭据登录后应用持续加载,API返回401状态码

已实现Data Protection组件,使用IdentityServer4做身份认证,日志报错如下:

2023-05-18 09:34:14,587 [138] ERROR [IdentityModel.AspNetCore.OAuth2Introspection.OAuth2IntrospectionHandler] [Error returned from introspection endpoint: Not Found] - Error returned from introspection endpoint: Not Found
2023-05-18 09:34:14,588 [138] INFO [IdentityModel.AspNetCore.OAuth2Introspection.OAuth2IntrospectionHandler] [BearerIdentityServerAuthenticationIntrospection was not authenticated. Failure message: Error returned from introspection endpoint: Not Found] - BearerIdentityServerAuthenticationIntrospection was not authenticated. Failure message: Error returned from introspection endpoint: Not Found 

另外,打印用户的subjectId和email声明均为null值。

核心排查与解决方向

1. 统一IdentityServer4端点配置

检查两台VM的IdentityServer4客户端配置,重点确认IntrospectionEndpoint地址:

  • 若VM1将自省端点指向自身(如http://vm1.internal/connect/introspect),VM2配置为网关统一地址,当VM1停掉后,VM2无法访问VM1的私有端点就会触发Not Found错误
  • 所有VM的IdentityServer4端点需统一配置为Application Gateway的公共/内部地址,避免绑定单个VM的私有地址

2. 验证Data Protection密钥同步

虽已实现Data Protection,但需确认密钥共享配置的一致性:

  • 检查是否使用Azure Blob Storage、SQL Server等共享存储保存加密密钥,确保两台VM的连接字符串、容器名称、密钥存储路径完全一致
  • 测试VM1生成的加密Cookie能否在VM2上正常解密,这是跨VM会话保持的核心前提
  • 可手动触发密钥同步,或重启两台VM的Data Protection服务组件

3. 检查Application Gateway会话配置

  • 确认会话亲和性设置:若启用基于客户端IP的亲和性,VM1停掉后客户端流量强制路由到VM2时,原有加密Cookie可能无法被正确解析;需将会话亲和性绑定到应用的会话Cookie(如.AspNetCore.Identity.Application)
  • 验证健康探测规则:确保VM1停掉后能被网关及时标记为不健康,避免流量误转发

4. 排查VM2的令牌验证逻辑

  • 检查VM2的网络策略:确认允许出站访问IdentityServer4的自省端点(包括端口、防火墙规则)
  • 对比两台VM的OAuth2自省中间件配置:确保客户端ID、客户端密钥、端点地址等参数完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:22:15