Носитель .Net Core Web API, эмитент недействителен

#jwt #identityserver4 #blazor #webapi

#jwt #identityserver4 #блейзор #webapi

Вопрос:

Я написал приложение Blazor WASM на основе последнего шаблона Microsoft. В режиме разработки все работает отлично, но после публикации в службе приложений Azure я случайно получаю 401 неавторизованный при вызове API, просматривая возвращаемые заголовки, которые я получаю

 WWW-Authenticate: Bearer error="invalid_token", error_description="The issuer 'https://*domain*.azurewebsites.net' is invalid"
  

Это происходит, когда клиент использует домен https://.azurewebsites.net клиент. Таким образом, он соответствует веб-API.

У меня также есть пользовательский домен, подключенный к службе приложений, это означает, что также https://www .домен.co.uk и https://домен.co.uk оба являются SSL.

Я проверил токен JWT, и он содержит правильный URL-адрес для версии веб-сайта, на который я звоню.

Иногда все работает, но в 60% случаев это позволяет пользователю войти в систему, а затем завершается сбоем при вызовах API. Кажется, я не могу отследить его до 1 доменного имени или шаблона, например, с истекшим сроком входа. Если вы выйдете из системы, а затем снова войдете в систему, проблема не устранится.

Настройка выглядит следующим образом

         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
            app.UseWebAssemblyDebugging();
        }
        else
        {
            app.UseExceptionHandler("/Error");
        }

        app.UseHttpsRedirection();
        app.UseBlazorFrameworkFiles();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseIdentityServer();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllers();
            endpoints.MapFallbackToFile("index.html");
        });
    }
  

Приветствуется любая помощь или подсказки в правильном направлении

Приветствия

Дэйв

Комментарии:

1. ты понял это, Дэйв, у меня такая же проблема с IS4, запущенным в Azure web app для контейнеров (Linux)

2. Привет, Джей Кинг, Нет, я так и не дошел до сути, в итоге я создал веб-приложение для каждого URL-адреса и уменьшил до 1 URL-адреса для каждого веб-приложения. Это сработало, но не является отличным решением

Ответ №1:

В моем случае это было вызвано средой Linux службы приложений. Теперь в документации есть четкое указание на это: For Azure App Service deployments on Linux, specify the issuer explicitly in Startup.ConfigureServices .

Вот как я это установил:

 services.Configure<JwtBearerOptions>(
  IdentityServerJwtConstants.IdentityServerJwtBearerScheme, 
  options =>
  {
    options.Authority = "https://my-site.azurewebsites.net";
#if DEBUG
    options.Authority = "https://localhost:5001";
#endif
  });