Azure Аутентификация AD в Kubernetes Невозможно снять защиту сообщения. Государство - PullRequest
1 голос
/ 19 февраля 2020

У меня есть веб-приложение do tnet core mvc, использующее аутентификацию AzureAD b2 c (через OpenId Connect). Это работает правильно, когда я запускаю его на локальном хосте, но когда я развертываю решение в Kubernetes и пытаюсь войти в систему, я получаю следующую ошибку:

Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.Exception: An error was encountered while handling the remote login.
 ---> System.Exception: Unable to unprotect the message.State.
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)'

Я установил вход NGINX с SSL, который пересылает трафик c к сервису в Kubernetes, так что он действует как обратный прокси в кластере

Чтобы обеспечить сохранение исходного имени хоста запроса, я добавил в файл startup.cs следующее:

services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders =
                    ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
                options.KnownNetworks.Clear();
                options.KnownProxies.Clear();
            });
app.UseForwardedHeaders();

, а также добавил следующие комментарии к моему входу

    nginx.ingress.kubernetes.io/proxy_http_version: "1.1"
    nginx.ingress.kubernetes.io/proxy_set_header: "Upgrade $http_upgrade"
    nginx.ingress.kubernetes.io/proxy_set_header: "Connection keep-alive"
    nginx.ingress.kubernetes.io/proxy_set_header: "Host $host"
    nginx.ingress.kubernetes.io/proxy_cache_bypass: "$http_upgrade"
    nginx.ingress.kubernetes.io/proxy_set_header: "X-Forwarded-For $proxy_add_x_forwarded_for"
    nginx.ingress.kubernetes.io/proxy_set_header: "X-Forwarded-Proto $scheme"
    nginx.ingress.kubernetes.io/proxy_buffers: "16 16k"
    nginx.ingress.kubernetes.io/proxy_buffer_size: "32k"

Я также удостоверился, что URL-адреса ответов были правильно настроены в Azure.

Есть ли шаг, который я пропускаю при настройке Ingress (NGINX), который может вызвать эту проблему?

1 Ответ

0 голосов
/ 04 марта 2020

Поскольку Крис Паджетт предположил, что это из-за запуска нескольких модулей, масштабирование его до одной реплики устранило проблему, и мне придется изучить вопрос о совместном использовании ключа защиты данных между модулями.

Идентификатор для любого, кто читает этот вход все равно выдаст вам ошибки с oid c из-за того, что заголовки слишком велики, так как следующие аннотации некорректны

    nginx.ingress.kubernetes.io/proxy_buffers: "16 16k"
    nginx.ingress.kubernetes.io/proxy_buffer_size: "32k"

Вместо этого должно быть

    nginx.ingress.kubernetes.io/proxy-buffers: "16 16k"
    nginx.ingress.kubernetes.io/proxy-buffer-size: "32k"
...