如何通过OpenIDConnect让HttpContext获取已认证用户信息?
问题:自定义中间件中context.User.IsAuthenticated始终为false
现有认证配置
项目已通过OpenIdConnect实现Microsoft身份提供者认证,相关配置代码如下:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { options.Instance = "https://login.microsoftonline.com/"; options.TenantId = TenantId; options.ClientId = builder.Configuration.GetValue<string>("AzureADClientID"); options.ClientSecret = builder.Configuration.GetValue<string>("AzureADSecret"); options.CallbackPath = "/signin-oidc"; options.SaveTokens = true; // 确保令牌被保存 }); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseMiddleware<CustomAuthenticationMiddleware>();
自定义中间件实现
为项目添加了自定义中间件,用于通过HttpContext提取信息执行自定义逻辑,已在Program.cs中注册该中间件,其核心执行代码如下:
[Authorize] public async Task Invoke(HttpContext context) { bool authValid = false; authValid = await CheckIfUserAPIAuth(context); // bool authValid = true; if (authValid) { await _next.Invoke(context); } else { context.Response.StatusCode = 401; //未授权 return; } }
问题现象
调用该中间件时,context.User的IsAuthenticated属性始终为false。预期可以获取用户系统信息,或至少拿到AzureAD相关信息(如AD-GUID)来执行自定义逻辑,调试时的HttpContext状态如下图所示:
内容的提问来源于stack exchange,提问作者zackychan97
相关产品推荐
相关产品推荐

