为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
相关产品推荐
相关产品推荐

