Выход из условного доступа Azure через указанное время - PullRequest
0 голосов
/ 17 мая 2018

Я хочу установить срок действия моего веб-приложения, чтобы через 1 час пользователь автоматически вышел из системы. Кажется, что в Azure появилась новая функция, называемая «условный доступ». Во-первых, у меня должен быть премиум-аккаунт (так что еще больше денег), а во-вторых, я не могу найти ничего в документации, которая показывает, как использовать его для выхода из системы через определенное время. Кто-нибудь уже использовал эту функцию? как это можно сделать?

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 22 мая 2018

Предполагая, что вы используете промежуточное программное обеспечение для проверки подлинности OpenID Connect и Cookie для защиты своего веб-приложения, по вашему требованию я предположил, что вы можете добавить пользовательскую заявку с именем loggedTicks и проверить интервал времени в OnValidateIdentity из * 1003. *, а затем явно вызовите операцию выхода из вашего веб-приложения и AAD. Вот фрагмент кода, вы можете сослаться на него:

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions() {
        ExpireTimeSpan=TimeSpan.MaxValue,
        Provider = new CookieAuthenticationProvider()
        {
            OnValidateIdentity = ctx => {

                var loggedClaim=ctx.Identity.FindFirst("loggedTicks")?.Value;
                if (loggedClaim != null)
                {
                    var loggedDateTime = new DateTime(long.Parse(loggedClaim), DateTimeKind.Utc);

                    if (loggedDateTime.AddHours(1) < DateTime.UtcNow)
                    {
                        ctx.RejectIdentity();
                        ctx.OwinContext.Authentication.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
                    }
                }
                return Task.FromResult(0);
            }
            }
    });

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            ClientId = clientId,
            Authority = authority,
            PostLogoutRedirectUri = postLogoutRedirectUri,
            RedirectUri = postLogoutRedirectUri,
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthenticationFailed = context => 
                {
                    context.HandleResponse();
                    context.Response.Redirect("/Error?message=" + context.Exception.Message);
                    return Task.FromResult(0);
                },
                    SecurityTokenValidated = async (x) =>
                    {
                        var identity = x.AuthenticationTicket.Identity;

                        //add a additional claim which represents the current user logged UTC time ticks
                        identity.AddClaim(new System.Security.Claims.Claim("loggedTicks", DateTime.UtcNow.Ticks.ToString()));

                        await Task.FromResult(0);
                    }
            }
        });
} 
...