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

.NET 6 Web API新电脑报HTTPS元数据错误的原因及解决办法

.NET 6 Web API迁移新电脑后JWT认证HTTPS元数据错误问题

问题描述

我有一个运行正常的.NET 6 Web API,更换新电脑并安装VS、Postman等工具后,调用API时出现以下错误,但旧电脑上一切正常。请问可能导致该现象的原因是什么?同时如何绕过这类误报:设置RequireHttpsMetadata=false以禁用HTTPS元数据要求。

错误信息

System.InvalidOperationException: 元数据地址(MetadataAddress)或授权服务器地址(Authority)必须使用HTTPS,除非在开发环境中通过设置RequireHttpsMetadata=false禁用此要求。
   在 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerPostConfigureOptions.PostConfigure(String name, JwtBearerOptions options)
   在 Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
   在 Microsoft.Extensions.Options.OptionsMonitor`1.<>c__DisplayClass10_0.<Get>b__0()
   在 System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   在 System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   在 System.Lazy`1.CreateValue()
   在 System.Lazy`1.get_Value()
   在 Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
   在 Microsoft.Extensions.Options.OptionsMonitor`1.Get(String name)
   在 Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.InitializeAsync(AuthenticationScheme scheme, HttpContext context)
   在 Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext context, String authenticationScheme)
   在 Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
   在 Microsoft.AspNetCore.Authorization.Policy.PolicyEvaluator.AuthenticateAsync(AuthorizationPolicy policy, HttpContext context)
   在 Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   在 Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   在 Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

请求头
=======
Accept: */*
Connection: keep-alive
Host: localhost:57877
User-Agent: PostmanRuntime/7.29.2
Accept-Encoding: gzip, deflate, br
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjBoWk5vLXZJSkt0WENYeEdWbTk3VmhMcmd0UjFvMzZjZE5ZVk54dk82Z0UifQ.eyJpc3MiOiJodHRwczovL2FjdWl0eWJyYW5kc2RldmxvZ2luLmIyY2xvZ2luLmNvbS84ZTE5OWEwZS05ZGI3LTRiZjUtOWJlNi1kZTUzYzg0N2M1YjUvdjIuMC8iLCJleHAiOjE2Njc2NzEyMzIsIm5iZiI6MTY2NzU4NDgzMiwiYXVkIjoiZDY1YTc5OTMtMDcwMC00MTI0LWI1NGEtMmE2ZWIwNTNhMjI0Iiwic3ViIjoiM2E4ZWYwMjgtZDcyNS00MmZlLTgxMDItYWM4NzhjODQ3MmJjIiwiZ2l2ZW5fbmFtZSI6IlJvYmVydCIsImZhbWlseV9uYW1lIjoiR3JlZW4iLCJzaWduSW5OYW1lIjoiUlhHMThAYWN1aXR5c3NvLmNvbSIsInNjcCI6ImNkbWRhdGEud3JpdGUgY2RtZGF0YS5yZWFkIiwiYXpwIjoiNDE2MjVlMzMtMTk1Ni00ZjM2LTgwNGItYTkxOTI0NDVkZGJhIiwidmVyIjoiMS4wIiwiaWF0IjoxNjY3NTg0ODMyfQ.mJ4rmtIp3IwqS2e56ON27pDPeBbNW9MYNp7fUpqRtVaSrVa2Ija0mwo8f2XNMaC0FUs2rvjs2wRn7vF1FmhI8-hM9RsC8po1tYkg1QtmOWbpF6SpUZZapyE1QXIRvyfW1InLP7abzCCu0_JHLHx8wXlCYUXYrHtIGBa27fe5jo1LIZXnGl0Ok6aYLBPxsdiryQJaI4VLNp0157PVfr1shayrjjkZ3P67XbbKfMzzspjXNe-ZCbo0lDlwm-PsOEdTlNisRiDpzAYrvdr8yG5IlS9uqVWTHLUH0zhBPQNgYr8relFRiGqjqFt9DKpms9B24P4rI47A6aupgyNYxJFo-g
Content-Type: application/json
Content-Length: 3872
Ocp-Apim-Subscription-Key: d81e91544c174a7c807a7a9f6c5a82d5
Postman-Token: bd3ae0bd-8d5b-44f4-bc49-296140d09300

可能的原因

  • 开发环境配置不一致:旧电脑的API配置中已添加RequireHttpsMetadata=false,或VS自动配置并信任了本地HTTPS证书,新电脑未做这些设置。
  • 环境变量识别差异:新电脑的ASPNETCORE_ENVIRONMENT环境变量未设置为Development,导致API启用生产环境的HTTPS元数据强制要求。
  • JWT认证地址协议问题:若JWT授权服务器地址使用HTTP而非HTTPS,非开发环境下ASP.NET Core会强制要求HTTPS元数据,触发错误。
  • 本地HTTPS证书未信任:新电脑未安装或信任VS生成的本地HTTPS开发证书,导致API只能通过HTTP启动,进而JWT元数据请求用HTTP触发检查。

解决方法

1. 禁用开发环境的HTTPS元数据要求

在.NET 6的Program.cs中配置JWT认证时添加以下设置:

using Microsoft.AspNetCore.Authentication.JwtBearer;

var builder = WebApplication.CreateBuilder(args);

// 添加JWT认证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "你的授权服务器地址"; // 替换为实际地址
        options.Audience = "你的API受众标识"; // 替换为实际受众
        // 仅开发环境禁用HTTPS元数据要求
        options.RequireHttpsMetadata = builder.Environment.IsDevelopment();
    });

// 其他配置...

var app = builder.Build();

// 启用认证中间件
app.UseAuthentication();
app.UseAuthorization();

// 其他中间件配置...

app.Run();

若使用传统Startup.cs模式:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.Hosting;

public class Startup
{
    public IWebHostEnvironment Env { get; }

    public Startup(IWebHostEnvironment env)
    {
        Env = env;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.Authority = "你的授权服务器地址";
                options.Audience = "你的API受众标识";
                options.RequireHttpsMetadata = Env.IsDevelopment();
            });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 其他配置...
        app.UseAuthentication();
        app.UseAuthorization();
        // 其他配置...
    }
}

2. 安装并信任本地HTTPS开发证书

打开命令提示符,运行以下命令生成并信任证书:

dotnet dev-certs https --trust

执行后重启VS和API,确保API通过HTTPS启动。

3. 确认环境变量设置

  • Windows:命令提示符运行echo %ASPNETCORE_ENVIRONMENT%,若不是Development,执行setx ASPNETCORE_ENVIRONMENT Development设置。
  • macOS/Linux:终端运行echo $ASPNETCORE_ENVIRONMENT,若不是Development,执行export ASPNETCORE_ENVIRONMENT=Development(临时生效)或修改shell配置文件永久设置。

内容的提问来源于stack exchange,提问作者Robert Green MBA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:00:24