Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проверка подлинности Dotnet Core CorrelationFailed

Автор вопроса: Georges LegrosОтветов: 2

Я пытаюсь настроить аутентификацию в новом основном приложении dotnet. Я использую IdentityServer, который работает нормально, поскольку он используется для других приложений.

Я получаю сообщение об ошибке, которое не говорит больше, чем "Сбой корреляции". Глядя на вывод в VS2017, я вижу предупреждение немного перед исключением, которое говорит следующее:

Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Предупреждение: .AspNetCore.Correlation. Государственная собственность не обнаружена.

Вот моя конфигурация:

    public void ConfigureServices(IServiceCollection services)
    {
        Debugger.Break();
        services.AddMvc();

        services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie(options =>
            {
                options.SlidingExpiration = true;
                options.Cookie.Name = "MyAwesomeCookie";
                options.ExpireTimeSpan = TimeSpan.FromMinutes(30);

            })
            .AddOpenIdConnect(options =>
            {
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.Authority = IdentityServerConstants.IdentityServerUrl;
                options.ClientId = "myclientid";
                options.ClientSecret = "supersecuresecret";

                //options.CorrelationCookie.Name = "something";

                foreach (var s in myScopes)
                {
                    options.Scope.Add(s);
                }
                options.ResponseType = "code id_token token";
                options.CallbackPath = new PathString("/");

                options.UseTokenLifetime = false;
                options.RequireHttpsMetadata = false;


            });
    }

Я изменил некоторые значения из соображений безопасности и исключил перехват событий, поскольку считаю, что это не имеет значения.

Я мог отследить его до этого файла: https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication/RemoteAuthenticationHandler.cs

Если последний метод в этом файле возвращает false, вы получаете ошибку "Correlation Failed".

Однако я долго гуглил ошибку и не мог найти, как ее исправить. Я, вероятно, пропустил что-то тривиальное в конфигурации...

Любая подсказка?

authenticationopenid-connectidentityserver3

Ответы

Ответ 1 · Mathew

У меня нет объяснения, почему это так, но я столкнулся с той же ошибкой и смог решить ее, удалив эту строку:

    options.CallbackPath = new PathString("/");

Ответ 2 · Erik W

У меня была эта проблема, которая была вызвана следующей опцией, установленной в RouteOptions:

options.LowercaseQueryStrings = true;

Это привело к тому, что параметр запроса state был написан в нижнем регистре при выполнении перенаправления обратно в приложение. Поскольку состояние чувствительно к регистру, это вызвало ошибку state property not found.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы