我配置了身份验证服务器:
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);
}
}
};
但是我无法确定何时设置过期日期。它应该只在用户选择“记住我”时设置,但是IsPersistent选项始终在客户端上为false。
这个问题也存在于简单的样板项目中: https://identityserver.github.io/Documentation/docsv2/overview/mvcGettingStarted.html
更新2:
我需要客户端cookie是持久的,因为Safari中有一个错误 - https://openradar.appspot.com/14408523
也许存在某些解决方法,所以我可以通过从Identity到Client的回调中传递过期日期来解决吗?
更新3:
实际上,我们的Identity和Client服务器具有相同的父域,例如app.server.local
和id.server.local
。也许我可以通过属于父域(.server.local
)的附加cookie传递过期日期?但我不知道在Identity上它可以写在哪里,在Client上可以应用在哪里。