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