Я использую 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, но это не работал