从Asp.Net Core SignalR迁移至Azure SignalR后Graph调用授权异常求助
Azure SignalR迁移后OBO流调用Graph触发增量授权的排查方案
核心问题点
迁移到Azure SignalR后,OBO流的令牌传递环节因Azure SignalR的代理机制出现了令牌上下文丢失或权限范围缺失,导致Microsoft Graph判定需要用户进行增量授权。
需核对的关键配置项
Azure SignalR服务身份验证模式
确保Azure门户中SignalR服务的「设置->身份验证」配置为使用应用服务身份验证,并关联正确的后端API AAD应用,保证客户端令牌能被正确传递和校验。显式配置令牌转发逻辑
在Program.cs中添加Azure SignalR服务时,必须显式配置令牌提供者,确保客户端的AAD令牌完整传递到后端API:builder.Services.AddAzureSignalR(options => { options.AccessTokenProvider = context => { return Task.FromResult(context.Request.Headers["Authorization"].ToString().TrimStart("Bearer ".ToCharArray())); }; });同时确认API的认证中间件配置正确,支持从Azure SignalR的代理请求中提取令牌并用于OBO流:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddMicrosoftGraph(builder.Configuration.GetSection("Graph")) .AddInMemoryTokenCaches();AAD应用权限与管理员同意
检查后端API对应的AAD应用,确保已添加所有调用Graph所需的权限,且这些权限均完成管理员同意。若迁移后新增权限未授权,会直接触发增量授权提示。Azure SignalR的CORS配置
在Azure SignalR服务的CORS设置中,添加Teams应用的域名,并确保允许传递Authorization请求头,避免令牌在跨域请求中被过滤。JWT令牌受众验证
确认API的JWT验证配置中,受众(Audience)包含后端API的客户端ID,或设置为接受Azure SignalR服务的标识符,避免因受众不匹配导致令牌被截断或验证失败。
调试验证步骤
- 在API中添加日志,打印接收到的令牌的
scp(权限范围)和aud(受众)字段,对比本地SignalR与Azure SignalR环境下的差异,定位是否存在权限缺失或受众错误。 - 使用相同权限的令牌在Microsoft Graph Explorer中测试调用,排除Graph自身的权限配置问题。
内容的提问来源于stack exchange,提问作者Tdc
相关产品推荐
相关产品推荐

