使用Azure AD OpenIdConnect和自定义中间件在ASP NET核心身份验证中Cookie过期

时间:2016-05-30 21:29:51

标签: c# azure authentication openid-connect asp.net-core-1.0

我正在努力在使用Azure AD通过OpenIdConnect身份验证模型验证我的.NET核心应用程序时设置cookie / auth令牌的超时。

登录方案通过以下方式在ConfigureServices方法中设置:

    services.AddAuthentication(options => options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);

然后我按如下方式设置配置:

    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        CookieName = "MyCookie",
        ExpireTimeSpan = TimeSpan.FromHours(2)
    });

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions()
    {
        Authority = authorityUri.AbsoluteUri,
        ClientId = azureOptions.ClientId,
        ClientSecret = azureOptions.ClientSecret,
        ResponseType = OpenIdConnectResponseTypes.CodeIdToken,
        Events = new OpenIdConnectEvents()
        {
            OnAuthorizationCodeReceived = async context =>
            {
                await aAuthenticateMiddleware.OnAuthenticate(context, logger);
            }
        }
    });

    app.UseMiddleware<aAuthenticateMiddleware>();

请注意,我没有使用内置标识(因为它对我们的用途不实用),而是使用自定义中间件。

在中间件层中,我正在检查用户是否经过身份验证,如果没有,则会发出质询:

    var authenticationProperties = new AuthenticationProperties() { RedirectUri = context.Request.Path.Value ?? "/" };
    authenticationProperties.AllowRefresh = false;
    authenticationProperties.IssuedUtc = DateTime.Now;
    authenticationProperties.ExpiresUtc = DateTime.Now.AddHours(2);
    await context.Authentication.ChallengeAsync(
        authenticationManager.IdentityProvider.AuthenticationScheme,
        authenticationProperties,
        ChallengeBehavior.Automatic
    );

这一切都运行正常并且正确地验证用户等等但是这会发出一个15分钟到期的身份验证令牌(和cookie)并且忽略我尝试设置的2小时到期时间。

我一直在参考来自aspnet / security存储库的GitHub的最新源代码示例......但是这些都没有提及有关覆盖所发布的默认到期的任何内容。

https://github.com/aspnet/Security/tree/dev/samples/OpenIdConnect.AzureAdSample

我发现的大多数示例仍然引用旧的AspNet库而不是AspNetCore库。

有些文章建议使用持久设置为True的SignInAsync可以使ExpireTimeSpan得到尊重,但这会引发“不支持异常”#34;在打电话时。 Azure AD不支持SignInAsync吗?

有没有人对如何实现这一目标有任何见解?

1 个答案:

答案 0 :(得分:0)

UseOpenIdConnectAuthentication设置UseTokenLifetime = false