IDX: 20803 Невозможно получить конфигурацию из ... - Web API - PullRequest
0 голосов
/ 11 февраля 2020

Привет! Я пытаюсь протестировать простое приложение WebApi с токеном JWT. В основном, я следовал примеру здесь

Я использую https.

В настоящее время Авторизация не используется. Проблема в том, что все работает нормально, если я выбираю «Inherit auth from parent» в Почтальон .

Как только я изменяю опцию на «BearerToken» и пытаюсь ввести JSONWebToken, который я получил , это дает мне

System.InvalidOperationException: IDX20803: Невозможно получить конфигурацию из: 'https://localhost: 44387 / api / .well-known / openid-configuration '. ---> System.IO.IOException: IDX20804: невозможно получить документ из: 'https://localhost: 44387 / api / .well-known / openid-configuration '. ---> Система. Net .Http.HttpRequestException: Код состояния ответа не указывает на успешность: 404 (Не найдено). в System. Net .Http.HttpResponseMessage.EnsureSuccessStatusCode () в Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsyn c (строковый адрес, отмена CancellationToken) --- конец трассировки стека внутренних исключений --- в Microsoft.I .Protocols.HttpDocumentRetriever.GetDocumentAsyn c (Строковый адрес, CancellationToken cancel)

Обратите внимание, я не использую промежуточное программное обеспечение IdentityServer здесь, а также в браузере, я не могу для просмотра https://localhost: 44387 / api / .well-known / openid-configuration

Я не уверен, где находится "openid-configuration" , особенно, если я не использую его явно в своем как pnet Core 3.0 веб-приложении 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 появляется, когда я его вообще не использовал. Все на моем локальном компьютере, и я использую IIS Express.

Я также попытался удалить и восстановить SSL-сертификаты localhost, восстановив IIS Express.

Любая подсказка будет полезна.

1 Ответ

1 голос
/ 11 февраля 2020

При настройке AddJwtBearer он будет связываться с документом метаданных OID C, поскольку вы установили Authority, который используется для получения ключей подписи сервиса c при проверке токенов jwt, выданных закрытым ключом of token service.

Ваш сценарий использует ключ безопасности symbri c для выдачи / проверки токенов jwt. Итак, как показывает документ , вы должны Не установить Authority, установить SymmetricSecurityKey для проверки токена в сценарии:

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
    };
});
...