Поддерживается ли приложение 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();
    }
}
Другие вопросы по тегам