Сохраните заявки в COOKIE в ASP.NET CORE 2.1

После успешной аутентификации мне нужно аутентифицировать пользователя из Identity Provider, используя OpenID connect. Мне нужно сохранить претензии пользователя в куки.

Но я не нахожу метод добавления в Request.Cookies, который принимает три аргумента, я могу только передать keyvaluepair в качестве аргумента signle.

Вот мой код

public IActionResult Login(string provider, string returnUrl = null)
        {
             Challenge(new AuthenticationProperties { RedirectUri = returnUrl ?? "/" }, provider);
            Request.Cookies.Append("key", "value", new CookieOptions());

            return View();

 }

Я также должен подтвердить, что где я должен написать код для хранилища COOKIE, чтобы он не мог быть сохранен снова после успешной аутентификации.

Вот мой код для аутентификации

services.AddAuthentication(options =>
            {
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;

            }).AddOpenIdConnect(options =>
                {
                    options.Authority = "https://accounts.google.com";
                    options.ClientId = _clientID;
                    options.ResponseType = "code id_token";
                    options.Scope.Add("openid");
                    options.Scope.Add("profile");
                    options.Scope.Add("email");
                    options.SaveTokens = true;
                    options.ClientSecret = _clientSecret;
                    //options.GetClaimsFromUserInfoEndpoint = true;
                    options.CallbackPath = "/home/index";
                    //options.SignedOutRedirectUri = redirectUrl;

                            options.Events = new OpenIdConnectEvents()
                            {
                                // handle the logout redirection 
                                OnRedirectToIdentityProviderForSignOut = context =>
                                {
                                    context.Response.Redirect(redirectUrl);
                                    context.HandleResponse();

                                    return Task.CompletedTask;
                                }
                            };


                        }).AddCookie(options => {
                            options.LoginPath = "/auth/signin";

                        });

заранее спасибо.

1 ответ

Не храните заявки в cookie-файле самостоятельно, потому что конечный пользователь может изменить cookie-файл. Что если я изменю cookie и добавлю претензию Role, Administrator (или любую другую концепцию, которую вы используете в своем приложении для представления прав доступа).

Используйте предоставленный обработчик файлов cookie для хранения заявок после проверки подлинности. Вот как модель предназначена для использования. Обработчик файлов cookie зашифрует и подпишет содержимое, чтобы защитить его от подделки.

Обновить после редактирования

С вашим кодом вы уже сохраняете результат аутентификации в Cookie, благодаря DefaultSigninScheme,

Полученные претензии должны быть доступны в User поставляется в последующих запросах.

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