Я настроил Identity Server:
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?
UPDATE:
Я могу установить любую дату истечения срока действия в клиентском приложении:
authenticationOptions.Provider = new CookieAuthenticationProvider()
{
OnResponseSignIn = (context) =>
{
var isPersistent = context.Properties.IsPersistent;
if (isPersistent) // Always false
{
context.CookieOptions.Expires = DateTime.UtcNow.AddDays(30);
}
}
};
Но я не могу определить, когда устанавливать дату истечения срока. Он должен быть установлен только тогда, когда пользователь выбирает "Запомнить меня", но параметр IsPersistent всегда ложный на стороне клиента.
Проблема существует и в проекте с простым шаблоном: https://identityserver.github.io/Documentation/docsv2/overview/mvcGettingStarted.html
UPDATE2:
Мне нужно, чтобы клиентский cookie был постоянным из-за ошибки в Safari - https://openradar.appspot.com/14408523
Возможно, существует какое-то обходное решение, поэтому я могу передать дату истечения срока в обратном вызове от Identity to Client?
Update3:
Собственно, наши серверы Identity и Client имеют один и тот же родительский домен, например app.server.local
и id.server.local
. Может быть, я могу передать дату истечения срока действия через дополнительный файл cookie, который принадлежит родительскому домену (.server.local
)? Но я понятия не имею, где это может быть написано на Identity и где оно может быть применено к клиенту.