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