AspNetCore использует cookie-файл и канал-носитель вместе, и делает атрибут Authorize для использования обоих по умолчанию - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть приложение, в котором используется токен Cookie и Bearer.Поскольку я не хочу обновлять каждую Авторизацию, предоставляя схемы, я переписал схемы по умолчанию:

   services
            .AddAuthorization(options =>
                {
                    options.DefaultPolicy = new AuthorizationPolicyBuilder()
                        .AddAuthenticationSchemes(OAuthValidationDefaults.AuthenticationScheme,
                            CookieAuthenticationDefaults.AuthenticationScheme,
                            "Identity.Application")
                        .RequireAuthenticatedUser()
                        .Build();
                });
            services.AddAuthentication()
                .AddExternalAuthProviders(Configuration)
                .AddFlymarkOpenIdConnectServer()
                .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
                {
                    options.LoginPath = "/Identity/Account/LogIn";
                    options.SlidingExpiration = true;
                    options.Events.OnRedirectToLogin = OnRedirectToLogin;
                })
                .AddOAuthValidation(OAuthValidationDefaults.AuthenticationScheme,
                    o=>o.Events.OnCreateTicket = OnCreateTicket);
            services.ConfigureApplicationCookie(config =>
            {
                config.Events = new CookieAuthenticationEvents
                {
                    OnRedirectToLogin = OnRedirectToLogin
                };
            });

Я думал, что если я добавлю CookieAuthenticationDefaults.AuthenticationScheme , то это будет работать, но куки не работаютдо тех пор, пока я не добавлю Identity.Application

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

1 Ответ

0 голосов
/ 31 декабря 2018

ASP.NET Core Identity использует собственные экземпляры обработчика проверки подлинности cookie, магически зарегистрированные для вас при вызове services.AddIdentity().

Как вы выяснили, эти экземпляры не используют имя схемы по умолчаниюно имя, которое начинается с префикса Identity..

В вашем коде вы в основном регистрируете новый экземпляр обработчика cookie с именем схемы по умолчанию.Но поскольку ничто в вашем коде не использует его для создания файлов cookie, он не может ничего проверять и всегда будет возвращать не прошедшие проверку подлинности билеты, поэтому он не будет работать, пока вы не добавите магический Identity.Application, который соответствует основному экземпляру обработчика файлов cookie.используется ASP.NET Core Identity.

Константа, которую вы ищете, находится в IdentityConstants.

Примечание: будьте предельно осторожны перед добавлением политики по умолчанию, котораяпринимает как куки-файлы аутентификации, так и токены-носители, так как ваше приложение может быть уязвимо для CSRF, если оно не использует анти-подделку (что обычно имеет место при разработке API).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...