Я настраиваю WS-Federation без идентификатора и не могу понять, как изменить продолжительность времени, в течение которого пользователь проходит аутентификацию. На самом деле я даже не знаю, сколько по истечении этого срока истекает по умолчанию.
Я попытался установить параметры ExpireTimeSpan
и Cookie.Expiration
cook ie в моем методе ConfigureServices
, но это дает я HTTP ERROR 500
. Если я удаляю TestAuthCookie
cook ie при входе в систему, он просто воссоздается при следующем авторизованном действии, не запрашивая снова логин. Я также попытался использовать метод SignIn()
в моем контроллере, потому что у него есть опция ExpiresUtc
, но это, похоже, ничего не делает.
То, что я хочу - это прекратить аутентификацию после 30 секунд подписания в. Если пользователь попытается выполнить действие только для авторизации через 30 секунд, ему потребуется снова войти в систему.
РЕДАКТИРОВАТЬ : Похоже, что когда я заменяю схему в моем SignIn
метод с CookieAuthenticationDefaults.AuthenticationScheme
, срок действия учетных данных истекает. Тем не менее, когда я нажимаю кнопку «Вход» (или любое действие, требующее авторизации), пользователь автоматически входит в систему и воссоздает cook ie. Но я хочу, чтобы от пользователя требовалось войти снова.
Руководство, которое я использовал: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/ws-federation?view=aspnetcore-3.0
Startup.ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = Configuration["wsfed:realm"];
options.MetadataAddress = Configuration["wsfed:metadata"];
})
.AddCookie(options =>
{
options.Cookie.Name = "TestAuthCookie";
//options.ExpireTimeSpan = TimeSpan.FromSeconds(30);
//options.Cookie.Expiration = TimeSpan.FromSeconds(30);
});
services.AddControllersWithViews();
}
Попытка использования метода SignIn в действии контроллера:
[Authorize]
public IActionResult Login()
{
var personClaims = new List<Claim>()
{
new Claim(ClaimTypes.Name, "PersonName"),
new Claim(ClaimTypes.Email, "person@email.com")
};
var personIdentity = new ClaimsIdentity(personClaims, "Person Identity");
var userPrincipal = new ClaimsPrincipal(new[] { personIdentity });
return SignIn(userPrincipal,
new Microsoft.AspNetCore.Authentication.AuthenticationProperties
{
RedirectUri = "https://app:1234/",
ExpiresUtc = DateTimeOffset.UtcNow.AddSeconds(30)
}, WsFederationDefaults.AuthenticationScheme);
}