Поддерживается ли приложение Blazor с Open ID Connect контейнерами службы приложений Azure?
Проблема. После развертывания приложения Blazor webassembly в качестве контейнера службы приложений в браузере появляется следующая ошибка:
AuthenticationService.js:1 Mixed Content: The page at 'https://YYY.azurewebsites.net/authentication/login?returnUrl=https%3A%2F%2FYYY.azurewebsites.net%2Ffetchdata' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://YYY.azurewebsites.net/.well-known/openid-configuration'. This request has been blocked; the content must be served over HTTPS.
Хотите знать, поддерживается ли развертывание докеров в Blazor в данный момент, если да, как мы можем это исправить?
Шаги по перепрофилированию: 1. В VS 2019 Professional Preview Version 16.7.0 Preview 2.0: создайте приложение Blazor (стандартный шаблон "Blazor WebAssembly App") с включенной опцией Hosted и аутентификацией в приложении с помощью Identity Server 2. Разверните контейнер докеров Linux. в веб-приложение Azure для службы контейнеров (B1) 3. Параметр Только HTTPS включен для службы приложений.
Для этого мы используем следующий простой файл докеров:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
EXPOSE 80
COPY . .
ENTRYPOINT ["dotnet", "AppNameHere.Server.dll"]
Каким-то образом библиотека OIDC JS, используемая Blazor, не учитывает тот факт, что мы работаем по HTTPS (хотя HTTP используется между экземпляром контейнера и балансировщиком нагрузки службы приложений).
1 ответ
Вам следует либо:
- Установите сертификат HTTPS для своей конечной точки и запустите полный сквозной HTTPS (рекомендуется).
Чтобы настроить пустельгу с сертификатом на докере, прочтите этот документ - Переопределите конфигурацию OIDC, используемую вашим приложением:
Создайте файл metadata.json
{
"issuer": "http://YYY.azurewebsites.net",
"jwks_uri": "https://YYY.azurewebsites.net/.well-known/openid-configuration/jwks",
"authorization_endpoint": "https://YYY.azurewebsites.net/connect/authorize",
"token_endpoint": "https://YYY.azurewebsites.net/connect/token",
"userinfo_endpoint": "https://YYY.azurewebsites.net/connect/userinfo",
"end_session_endpoint": "https://YYY.azurewebsites.net/connect/endsession",
"check_session_iframe": "https://YYY.azurewebsites.net/connect/checksession"
}
"эмитент": " http://yyy.azurewebsites.net/" - это URL-адрес HTTP, а не HTTPS.
Настройте приложение для получения метаданных из вашего пользовательского файла
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddOidcAuthentication<RemoteAuthenticationState, RemoteUserAccount>(options =>
{
var providerOptions = options.ProviderOptions;
providerOptions.Authority = "https://YYY.azurewebsites.net";
providerOptions.MetadataUrl = "https://YYY.azurewebsites.net/metadata.json";
providerOptions.PostLogoutRedirectUri = "https://YYY.azurewebsites.net/authentication/logout-callback";
providerOptions.RedirectUri = "https://YYY.azurewebsites.net/login-callback";
});
await builder.Build().RunAsync();
}
}