当前位置: 首页 > 知识库问答 >
问题:

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

邰英毅
2023-03-14

我目前正在努力设置cookie/auth令牌的超时时间,以验证我的。NET Core应用程序通过OpenIdConnect身份验证模型使用Azure AD。

正在通过以下方式在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,但是这会在调用它时抛出“不支持的异常”。也许Azure AD不支持SignInAsync?

有人对如何实现这一目标有什么见解吗?

共有1个答案

司徒墨竹
2023-03-14

在UseOpenIdConnectAuthentication中设置UseTokenLifetime=false

 类似资料:
  • 在过去的几周里,我一直在努力掌握KeyClope,这样我就可以实现一种使用遗留提供商(基于Oracle,带有会话表和各种奇怪的东西)对用户进行身份验证的方法。我们计划在不久的将来解决这个问题,但目前我们必须解决这个问题,所以我们的想法是在前线使用KeyClope——利用它提供的主要好处,比如SSO——在需要身份验证的应用程序中省略传统的身份验证提供程序。 我读了一些关于构建自定义OIDC身份提供程

  • 问题内容: 有谁知道或知道我可以学习如何使用Python和Google App Engine创建自定义身份验证过程的地方? 我不想使用Google帐户进行身份验证,也希望能够创建自己的用户。 如果不是专门针对Google App Engine,是否有关于如何使用Python和Django实现身份验证的资源? 问题答案: django 1.0今天在Google AppEngine上进行了更新。但是您

  • 我试图在一个反应式Spring Boot应用程序中配置一个Spring Security性,该应用程序具有一个Vuejs前端,在未经身份验证时将用户重定向到外部OpenID提供程序(用于身份验证)。在用户通过OpenID提供程序进行身份验证并重定向回应用程序(前端)后,将根据OpenID提供程序的响应创建用户名密码身份验证令牌(身份验证),并手动进行身份验证。 但是,在执行此操作时,应用程序似乎无

  • 在不生成Laravel默认身份验证控制器的情况下,我创建了自己的登录和注册控制器。 我的路线是这样的 用于登录 登记 一切都很好。现在我需要一件事。每当我放置中间件时,一个未经身份验证的用户将被重定向到我的自定义登录页面路由到。 如何做到这一点?

  • 我想对我的Vue使用Firebase身份验证。js应用程序考虑以下限制: 我无法使用任何受支持的提供商(Facebook、Google等) 我不能使用电子邮件-该应用程序是为孩子们设计的,因此,我想使用他们在注册时选择的唯一昵称,而不是电子邮件,该昵称必须使用本地rtl语言(非英语) 我想使用firebase云函数作为唯一的服务器端代码 期望的结果是:a)使用昵称、密码注册 如何使用firebas