gpt4 book ai didi

c# - IDX :20803 Unable to obtain configuration from. .. - Web API

转载 作者:行者123 更新时间:2023-12-04 14:45:26 32 4
gpt4 key购买 nike

您好,我正在尝试使用 JWT token 测试一个简单的 WebApi 应用程序。主要是我按照示例here

我正在使用 https。

暂时不使用授权。问题是,如果我在 Postman 中选择“从父​​级继承身份验证”,一切正常。

只要我将选项更改为“BearerToken”并尝试输入我收到的 JSONWebToken,它就会给我

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://localhost:44387/api/.well-known/openid-configuration'. ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'https://localhost:44387/api/.well-known/openid-configuration'. ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found). at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode() at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel) --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)

请注意,我在这里没有使用 IdentityServer 中间件,在浏览器上我也无法浏览到 https://localhost:44387/api/.well-known/openid-configuration

我不确定这个 "openid-configuration" 在哪里,特别是当我没有在我的 aspnet Core 3.0 Web APi 应用程序中明确使用它时?这是我的代码..

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
//extra code removed for brevity
//Authentication
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = "https://localhost:44387/api";
options.Audience = "JWT:Issuer";
options.TokenValidationParameters.ValidateLifetime = true;
options.TokenValidationParameters.ClockSkew = TimeSpan.FromMinutes(5);
options.RequireHttpsMetadata = false;

});
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
//to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.
app.UseHsts();
}

//to redirect HTTP requests to HTTPS.
app.UseHttpsRedirection();

app.UseAuthentication();

app.UseRouting();





app.UseEndpoints(endpoints =>
{

endpoints.MapControllers();

endpoints.MapRazorPages();
});
}

代替 https://localhost:44387/api 我也试过 https://localhost:44387/ https://localhost 但没有运气.. 我主要是想了解为什么我根本没有使用 openid 时会出现它。一切都在我的本地机器上,我正在使用 IISExpress。

我还尝试通过修复 IISExpress 删除和重新创建 localhost SSL 证书。

任何线索都会有所帮助。

最佳答案

在您的 AddJwtBearer 设置中,由于您设置了 Authority ,它将联系 OIDC 元数据文档,用于在验证 jwt token 时获取服务的公共(public)签名 key 由 token 服务的私钥签发。

您的方案是使用对称安全 key 来发布/验证 jwt token 。所以作为document可见,场景中应该设置Authority,设置SymmetricSecurityKey来验证 token :

var appSettingsSection = Configuration.GetSection("AppSettings");
services.Configure<AppSettings>(appSettingsSection);

// configure jwt authentication
var appSettings = appSettingsSection.Get<AppSettings>();
var key = Encoding.ASCII.GetBytes(appSettings.Secret);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false
};
});

关于c# - IDX :20803 Unable to obtain configuration from. .. - Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60162382/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com