Я тестирую как сервер, так и клиента на моей машине, и у меня возникает следующее: Я нормально вхожу в клиент, выполняю некоторую работу, закрываю браузер, не выходя из системы.Затем я снова открываю клиент, и я все еще вошел в систему (ожидается), но через минуту я автоматически вышел из системы (НЕ ожидается).
Я использую oidc-client.js, настроенный так:
var mgr = new Oidc.UserManager({
userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }),
authority: 'http://localhost:5000',
client_id: 'TST_PORTAL',
redirect_uri: window.location.origin + '/static/callback.html',
response_type: 'code id_token token',
scope: 'api47 openid profile read write offline_access active_dir email',
post_logout_redirect_uri: window.location.origin + '/',
silent_redirect_uri: window.location.origin + '/static/silent-renew.html',
accessTokenExpiringNotificationTime: 10,
automaticSilentRenew: true,
filterProtocolClaims: true,
loadUserInfo: true
})
После дальнейшего изучения я вижу, что клиент звонит / подключается / проверяет состояние (возвращает статус 200) для поддержки единого выхода, а затем вызывает / подключает / авторизирует? Client_id ..., что не удается (302 перенаправленияto / home / error).В журналах сервера идентификации указано «в запросе на авторизацию нет пользователя» и «недопустимый тип предоставления для клиента: неявный. У меня настроены гибрид и client_credentials. Я прочитал что-то здесь , поэтому я добавил этот код при запуске IdentityServer:
services.ConfigureApplicationCookie(options =>
{
options.Cookie.SameSite = SameSiteMode.None;
});
Но это, похоже, не помогло.
Размышляя вслух, это может быть междоменной проблемой, так как они работают на разных портах, или у меня неправильно настроены COR?Я не вижу ошибок cors. Также должен ли GET-запрос checksession иметь параметры? Я читал спецификацию, и в ней говорится о фреймах, но не о сетевом трафике, поэтому я не уверен, как должен выглядеть этот трафик.
Обновление:
Первая страница моего приложения - это целевая страница анонимной аутентификации, которая проверяет, вошли ли они в систему. Если это так, она перенаправляет их на домашнюю страницу. Коддля проверки это:
// Get signed in status without prompting to log in
getIsSignedIn() {
console.log('Checking if signed in');
return new Promise((resolve, reject) => {
mgr.getUser().then(function (user) {
if (user == null) {
console.log('Not Signed In');
return resolve(false)
} else {
if (user.expired) {
console.log('User expired');
return resolve(false)
} else {
console.log('Signed In');
return resolve(true)
}
}
}).catch(function (err) {
console.log('Error when checking if signed in');
return reject(false)
});
})
}
Кажется, это возвращает true, даже когда я открываю новый браузер. Я даже изменил Oidc.WebStorageStateStore наиспользуйте значение по умолчанию, а не localStorage.