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

如何通过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状态如下图所示:
调试器中的HttpContext值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:32:33