Сохраните заявки в COOKIE в ASP.NET CORE 2.1 - PullRequest
0 голосов
/ 13 декабря 2018

Мне нужно аутентифицировать пользователя из 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 Ответ

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

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

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

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

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

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

...