Как заставить пользователя войти в IdentityServer 3 с аутентификацией cook ie - PullRequest
0 голосов
/ 01 февраля 2020

Я использую IdentityServer 3 с OpenIdConnect и готовлю ie аутентификацию. Пользователи хранятся в SQL с использованием ASP. NET Система членства в удостоверениях.

I startup.cs У меня настроено событие OnTokenValidated. Это событие вызывается, когда пользователь входит в систему, вводя учетные данные. В этом случае я сохраняю некоторые претензии в ClaimsIdentity.

( Обратите внимание, что я удалил некоторый код для смелых )

    public void ConfigureServices(IServiceCollection services)
    {     
        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
         .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
         { 
             options.Cookie = new CookieBuilder()
             {
                 Name = "mycookie",
                 HttpOnly = true,
             };
             options.SlidingExpiration = true;
         })
         .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
         {                 
             options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; //tells cookies scheme to persist user's identity in cookie
             options.SignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;//tells cookies scheme to remove persisted cookie

             options.Events = new OpenIdConnectEvents()
             {
                 OnTokenValidated = async context =>
                 {                         
                     var newIdentity = new ClaimsIdentity(context.Principal.Identity.AuthenticationType);

                     //Insert some addition claims into newIdentity here

                     context.Properties.IsPersistent = true;
                     context.Properties.ExpiresUtc = DateTime.UtcNow.AddHours(3);

                     // overwrite existing authentication ticket
                     context.Principal = new ClaimsPrincipal(newIdentity);
                 },                                          
             };
         });
    }

Я обновил OnTokenValidated logi c, который добавляет еще одну претензию в ClaimsIdentity, и эта заявка важна для правильной работы приложения.

Моя проблема заключается в том, что OnTokenValidated запускается только при входе пользователя в систему путем ввода учетных данных на экран входа. Если пользователь уже вошел в систему и имеет активную кухню ie в сеансе браузера, то OnTokenValidated не будет запущено. (Это поведение, как и ожидалось)

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

...