如何将到期日期设置为客户cookie



我配置了身份服务器:

public void Configuration(IAppBuilder app)
{
    var factory = new IdentityServerServiceFactory().UseInMemoryClients(new Client[] {
        new Client()
        {
            ClientName = "MyClient",
            ClientId = "MyClientId",
            Enabled = true,
            Flow = Flows.Implicit,
            RedirectUris = new List<string> { "MyClientServer/callback" },
        };
    });
}

和客户端服务器:

public void Configuration(IAppBuilder app)
{
    var cookieOptions = new CookieAuthenticationOptions();
    cookieOptions.AuthenticationType = "Cookies";
    app.UseCookieAuthentication(cookieOptions);
    var authenticationOptions = new OpenIdConnectAuthenticationOptions() {
        Authority = "https://MyIdentityServer/core",
        ClientId = "MyClientId",
        SignInAsAuthenticationType = "Cookies",
        UseTokenLifetime = true,
        RedirectUri = "MyClientServer/callback"
    });
    app.UseOpenIdConnectAuthentication(authenticationOptions);
}

用户登录使用"记住我"选项身份cookie已过期日期:

idsvr.session    expires 04 October ...

但是客户cookie没有:

.AspNet.Cookies  at end of session

我该怎么做才能将相同的到期日期设置为客户cookie?

更新:

我可以在客户端应用程序中设置任何到期日期:

authenticationOptions.Provider = new CookieAuthenticationProvider()
{
    OnResponseSignIn = (context) =>
    {
        var isPersistent = context.Properties.IsPersistent;
        if (isPersistent) // Always false
        {
            context.CookieOptions.Expires = DateTime.UtcNow.AddDays(30);
        }
    }
};

,但我无法确定何时设置到期日期。仅当用户选择"记住我"时,才应设置它,但是始终在客户端始终为false。

问题也存在于简单样板项目上:https://indistityserver.github.io/documentation/docsv2/overview/mvcgettingstarted.html

update2:

我需要客户cookie持续存在,因为Safari中的错误-https://openradar.appspot.com/144408523

也许存在一些解决方法,因此我可以将回调的到期日期从身份转到客户端?

update3:

实际上,我们的身份和客户端服务器具有相同的父域,例如app.server.localid.server.local。也许我可以通过属于父域(.server.local)的其他cookie传递到期日期?但是我不知道它可以在身份方面写在哪里,以及可以将其应用于客户的位置。

IdentityServer发出的cookie和客户端应用程序发行的cookie均未以任何方式链接。IdentityServer在客户端应用程序中对Cookie没有任何控制。

当您登录IdentityServer时,您会发出一个cookie,该cookie跟踪身份服务器中身份验证的用户。这可以使用户免于输入每个客户端应用程序的凭据,从而促进单个登录。

默认情况下,此cookie可以持续到该会话(因此浏览器关闭后将到期),否则,如果您设置了"记住我",它将持续持续一定的天数。

在成功验证IdentityServer的身份令牌后,将发出客户端应用程序中的cookie。此cookie可以有任何到期时间,任何策略,任何名称。它完全由客户端应用程序控制。在您的情况下,可以在客户端应用程序中的CookieAuthenticationOptions中设置cookie到期。

您需要处理cookie auth事件。开放ID中间件只是创建一个auth cookie,因此您可以从这些事件中处理此cookie的所有方面。您需要查看这些事件,并且有了一些反复试验,您应该能够管理Cookie寿命。

您可以在此处使用以下代码在Java-Script上进行此操作,我创建了此cookie以在14天内到期。

var exdate = new Date();
exdate.setDate(exdate.getDate() + 14);
document.cookie = "yourcookie=" + yourCookieValue + ";expires=" + exdate.toUTCString() + ";";

相关内容

  • 没有找到相关文章

最新更新