URI перенаправления, отправленный как HTTP, а не HTTPS в приложении, работающем по HTTPS

У меня есть приложение MVC ядра Asp .net. Который подключается к Identity Server 4 для аутентификации. Размещено в рое докеров

Приложение MVC размещено на https: // XXXXXXX

ConfigurServies

services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
             .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
            {
                //options.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"C:\temp-keys\"));
                // when the identity has been created from the data we receive,
                // persist it with this authentication scheme, hence in a cookie
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                // Identity server endpoint
                options.Authority = settingsSetup.IdentityServerEndpoint;

                // Client id to login with
                options.ClientId = settingsSetup.ClientId;
                // Client secret.
                options.ClientSecret = settingsSetup.Secret;

                // Scope of our API
                options.Scope.Add("testapi");
                options.Scope.Add("devconsole");
                // adding offline_access to get a refresh token
                options.Scope.Add("offline_access");

                options.ResponseType = "code id_token";
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;
            });

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

Invalid redirect_uri: http://developerconsole.XXXXX.io/signin-oidc
{
  "ClientId": "BB1D2DA8-D7E4-4AF5-94FA-19EAD6B7D711.apps.XXXXX.biz",
  "ClientName": "Developer Console",
  "AllowedRedirectUris": [
    "http://localhost:55000/signin-oidc",
    "http://localhost:55000/auth.html",
    "http://localhost:55000/auth-silent.html"
    "https://developerconsole.XXXXX.io/signin-oidc"
  ],
  "SubjectId": "21379983",
  "RequestedScopes": "",
  "Raw": {
    "client_id": "BB1D2DA8-D7E4-4AF5-94FA-19EAD6B7D711.apps.XXXXX.biz",
    "redirect_uri": "http://developerconsole.XXXXX.io/signin-oidc",
    "response_type": "code id_token",
    "scope": "openid profile testapi devconsole offline_access",
    "response_mode": "form_post",
    "nonce": "636625889658410682.MjNlMmQwNjgtZmY0MC00MmVkLWFiNmMtN2M2YmQ5YTM5ZTQ3NjFiYzI2ZjktZWM0Yi00NDk3LTk1ZWMtNjJkYjViMDYwMTJm",
    "state": "CfDJ8Pwa8A3ipXlKtuyxNMpMxAz5QUFmdSunRKdlKS9sS390AKp8gIUZShQUMMCkFAhYLytitgsXUBgwlQDJaJvtHFqzHygLCPwS8Jab6IJzhpry90qS51E1y_eRlppamRDOzYDZ6fcDFzWV1U43BTP2B6pnPTSLNcZRaooyGBXtNokeUqOJ--u-_MOQB8Bw3n2cRyV4kisHNkslD1Gsi2wn1Cx6aTVlqzw_pxHelAXm1P8FyDJpD7G0azFgKgpQF0DRJtC5penRJQzHIHvQN8v4ECGeuSD1zlyfJYClLO2r6kY_R2OYqtBkV0r_SNc9h7xUYmnVaHKQzYqVc_mJO4iLLSMTZrBUICZWR8c4PZw0Os3N",
    "x-client-SKU": "ID_NET",
    "x-client-ver": "2.1.4.0"
  }
}

Ошибка возникает из-за того, что у меня есть "https://developerconsole.XXXXX.io/signin-oidc" в качестве URI перенаправления, а не "http://developerconsole.XXXXX.io/signin-oidc". Я не хочу добавлять URI перенаправления HTTP.

Почему мое приложение создает URI перенаправления с http, а не https?

Если я добавлю HTTP, я получаю раздражающую ошибку корреляции. что, я думаю, связано с тем, что он возвращается сервером как https, поскольку сервер автоматически преобразует http в https.

An unhandled exception occurred while processing the request. Exception: Correlation failed. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler+d__12.MoveNext()

Stack Query Cookies Headers Exception: Correlation failed. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler+d__12.MoveNext() System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.AspNetCore.Authentication.AuthenticationMiddleware+d__6.MoveNext() System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+d__7.MoveNext()

Мне, вероятно, не нужно упоминать, что это отлично работает на localhost: /

Может ли это быть из-за того, что вы находитесь за балансировщиком нагрузки (L7), а внутренняя связь за балансировщиком происходит по протоколу HTTP, а не HTTPS?

spender 22.05.2018 15:13

Что ж, я знаю, что у нас есть балансировщик нагрузки, и я знаю, кого искать.

DaImTo 22.05.2018 15:16

... в этом случае может помочь ПО промежуточного слоя перенаправленных заголовков в Microsoft.AspNetCore.HttpOverrides. Взгляните сюда: docs.microsoft.com/en-us/aspnet/core/host-and-deploy/…

spender 22.05.2018 15:18

Только в случае необходимости обратитесь к администратору балансировщика нагрузки, чтобы убедиться, что заголовки X-Forwarded-For, X-Forwarded-Proto и X-Forwarded-Host включены в перенаправленные запросы. Вероятно, так и есть.

spender 22.05.2018 15:20

Мне только что сказали (l4) тот, что в рое докеров. Это работает в другом проекте @spender, которому интересно, добавил ли он его в этот проект, а не в этот.

DaImTo 22.05.2018 15:23

Если это балансировка нагрузки на уровне 4, то вышеуказанное не применимо.

spender 22.05.2018 15:26

Можете ли вы дважды проверить правильность settingsSetup.IdentityServerEndpoint?

penleychan 22.05.2018 22:48

@penleychan, если бы это было неправильно, я бы не получил правильный ответ от сервера идентификации. Сервер регистрирует меня в своем приложении, которое не влияет на логин правильно

DaImTo 23.05.2018 08:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
8
8 595
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Решение было довольно простым. Установив UseForwardedHeaders, он теперь отправляет все запросы как HTTPS.

app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedProto
        });

Correlation failed.

теперь исправлено, и мне больше не нужно использовать uris для перенаправления http и https.

В случае, если приложение развертывается в Linux (скажем, приложение .NET core в контейнере докеров Linux), помимо настройки заголовков Forward также необходимо было очистить KnownNetworks и KnownProxies, чтобы убедиться, что URL-адрес перенаправления оставался https. Подробнее см. docs.microsoft.com/en-us/aspnet/core/host-and-deploy/….

Suketu Bhuta 29.07.2019 19:03

@SuketuBhuta Эта информация была действительно полезной

avg_bloke 16.09.2019 10:30

Нам пришлось использовать это решение, потому что мы перенаправили HTTP на HTTPS в NGINX conf за aws ELB. и это сработало для нас как шарм.

Vibhanshu Biswas 20.02.2020 13:05

@SuketuBhuta, как / где / когда вы очистили KnownNetworks и KnownProxies?

David 25.08.2020 05:33

@David, см. Этот раздел статьи, на которую я ссылался выше: docs.microsoft.com/en-us/aspnet/core/host-and-deploy/…, в основном вы очищаете после установки ForwardingHeader. Надеюсь это поможет.

Suketu Bhuta 25.08.2020 15:35

добавьте этот код только в свой файл web.config и, конечно же, на change.com со своим веб-сайтом, любой вводит URL-адрес в браузере напрямую URI перенаправления с HTTP на HTTPS.

<system.webServer>
    <rewrite>
      <rules>
        <rule name = "IP Hit" stopProcessing = "true">
          <match url = "(.*)" />
          <conditions>
            <add input = "{HTTP_HOST}" pattern = "http://www.exemple.com" />
            <add input = "{HTTPS}" pattern = "off" ignoreCase = "true" />
          </conditions>
          <action type = "Redirect" url = "https://www.exemple.com/{R:1}" redirectType = "Permanent" />
        </rule>
      </rules>
    </rewrite>
    <urlCompression doDynamicCompression = "true" doStaticCompression = "true" dynamicCompressionBeforeCache = "true" />
    <staticContent>
      <clientCache cacheControlMode = "UseMaxAge" cacheControlMaxAge = "365:00:00" />
    </staticContent>
 <system.webServer>

Этот ответ только перемещает пункт назначения с http на https, он не заставляет ссылки отображаться в https.

Adam 16.07.2018 20:06

Другие вопросы по теме