Я разрабатываю систему единого входа на основе OAuth2.
У меня есть 3 службы:
Поставщик удостоверений SSO, который содержит пользователей и сервер OAuth2 - http://sso.idp.loc
поставщик услуг единого входа с интерфейсной частью на Angular - http://sso.sp -angular.loc
- поставщик услуг единого входа (случайный веб-сайт) - http://sso.sp -web.loc
Поставщики услуг проверяют каждый токен доступа запроса, выданный поставщиком удостоверений.
Механизм следующий:
- Перейдите к любому поставщику услуг и нажмите логин
- Перенаправить на sso.idp.loc / login_check, чтобы проверить учетные данные (из файлов cookie).
- Если не авторизован - перейдите на sso.idp.loc / login.
- После входа в систему - установите куки для провайдера идентификации и перенаправьте его на целевой провайдер с этими куки в параметре get.
- Установка новых файлов cookie из параметра get для поставщика услуг и перенаправление на целевой путь.
- Если вдруг произошла ошибка аутентификации на поставщике услуг - перейдите в sso.idp.loc / login_check с целевым путем.
Cookies содержат oauth-доступ и токены.
Все в порядке, пока токен действителен.По истечении срока действия токена службы prodider переходит на sso.idp.loc / login_check и снова проверяет токен доступа, а затем пытается один раз получить новый, используя токен обновления.В случае успеха новые учетные данные устанавливаются как sso.idp.loc и поставщик услуг.Допустим, это произошло на sso.sp-web.loc.
Здесь у меня есть несколько проблем:
- Тогда другой поставщик услуг sso.sp-angular.loc не знает, что учетные данныебудут изменены, и следующий запрос будет перенаправлен на sso.idp.loc / login_check (его можно отсортировать, отправив запрос второй раз).
- Когда пользователь редактирует форму на sso.sp-web.loc и токен имеетсрок действия истекает, тогда отправка завершится неудачей.
- Как управлять вызовами ajax после истечения срока действия токена?
Следует учитывать тот факт, что токен доступа может быть изменен в любое время.
Возможно, что-то не так в моей системе.Буду рад здесь любым решениям.