Время истечения аутентификации WS-Federation - PullRequest
0 голосов
/ 03 февраля 2020

Я настраиваю 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);
}

1 Ответ

0 голосов
/ 03 февраля 2020

попробуйте этот метод для создания повара ie

  public void GenerateCookie(HttpResponse response, string name, string token)
    {
        try
        {
            int timeToLiveCookie = 0;
            TimeSpan timeSpanToAdd = default(TimeSpan);
            DateTime currentDate = DateTime.Now;
            CookieOptions cookieOptions = new CookieOptions();
            cookieOptions.Path = "/";
            cookieOptions.HttpOnly = false;

            cookieOptions.Expires = currentDate.AddYears(10);
            response.Cookies.Append(name, token, cookieOptions);             

        }
        catch (Exception exception)
        {
            throw exception;
        }
    }
...