Asp.net core 2.0 RequireHttpsMetadata=false for Development



InvalidOperationException:元数据地址或权限必须使用 HTTPS,除非通过设置禁用开发 RequireHttpsMetadata=false.

我在哪里设置?

我试过Startup.ConfigureServices()

if (_hostingEnvironment.IsDevelopment())
services.AddMvc(opts => opts.RequireHttpsPermanent = false);

仍然收到错误。 还尝试将其放在Web.Config中,只是为了让我在本地调试。

<RequireHttpsMetadata>false</RequireHttpsMetadata>

两者都不行。我找不到 MS 关于在哪里设置它的任何文档!

我正在使用 jwt 持有者身份验证。

您需要将 JwtBearerOptions.RequireHttpsMetadata 添加到 false 作为 ConfigureServices,正如 Larkin 上面建议@kirk的那样。

public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = Configuration["Auth0:Authority"];
options.Audience = Configuration["Auth0:Audience"];
options.RequireHttpsMetadata = false;
});
services.AddMvc();
}

options.Authority需要是一个安全连接。省略协议将默认为 http,因此请务必将此 url 显式设置为 https。RequireHttpsMetadata=false只应在开发方案中使用,因此在将其设置为 false 之前,应检查托管环境。

我想我会添加一些代码来展示如何定义主机环境是否在"开发"中的检查。这使您的代码不易出现漏洞,因为您不必在投入生产之前对其进行更改。希望这也可以帮助其他人搜索此问题。

public IConfiguration Configuration { get; }
public IHostingEnvironment HostEnvironment { get; }
public Startup(IConfiguration configuration, IWebHostEnvironment hostEnvironment)
{
Configuration = configuration;
HostEnvironment = hostEnvironment;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(opt =>
{
opt.Audience = Configuration["AAD:ResourceId"]; 
opt.Authority = $"{Configuration["AAD: Instance"]}{Configuration["AAD:TenantId"]}";
if (HostEnvironment.IsDevelopment())
{   // to make sure this is only used during development
opt.RequireHttpsMetadata = false; 
}
});
}
// rest omitted

最新更新