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

为HotChocolate+ASP.NetCore 5.0的GraphQL端点配置Windows身份验证求助

问题排查与修复方案

你的基础ASP.NET Windows身份认证配置是正确的,REST端点可正常获取身份信息说明宿主(IIS/IIS Express)配置无问题,故障点出在HotChocolate端点与ASP.NET认证体系的适配配置上:

1. 为GraphQL端点显式绑定授权规则

你当前配置的MapGraphQL默认没有关联ASP.NET Core的端点认证逻辑,需要显式调用RequireAuthorization()将Windows身份凭证传递到GraphQL上下文:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    // 给GraphQL端点添加授权要求,绑定Windows认证方案
    endpoints.MapGraphQL().RequireAuthorization();
});

2. 配置开发环境自检权限(可选)

如果需要在开发环境加载Schema、使用Banana Cake Pop调试工具,可配置HotChocolate开放开发环境的自检权限,避免Schema加载被拦截:

services.AddGraphQLServer()
        .AddAuthorization()
        .AddQueryType<Query>()
        // 开发环境开放Schema自检,生产环境可按需关闭
        .AllowIntrospection(env.IsDevelopment());

3. 放行OPTIONS预检请求

Windows认证不会自动处理OPTIONS预检请求,而GraphQL调试工具加载Schema、发起跨域请求时都会先发OPTIONS请求,可在认证管道前添加OPTIONS请求放行逻辑:

app.UseRouting();

// 放行所有OPTIONS预检请求,避免调试/跨域场景下请求被拦截
app.Use(async (context, next) =>
{
    if (context.Request.Method == "OPTIONS")
    {
        context.Response.StatusCode = 200;
        await context.Response.CompleteAsync();
        return;
    }
    await next();
});

app.UseAuthentication();
app.UseAuthorization();

4. 验证身份传递效果

可在Query类中添加测试字段验证Windows身份是否正确传入GraphQL上下文:

public class Query
{
    [Authorize]
    public string GetCurrentLoginUser()
    {
        return HttpContext.Current?.User.Identity?.Name ?? "未获取到身份信息";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:39:03