Мне нужно реализовать сервер централизованной аутентификации с единой регистрацией.
Одно из требований заключается в том, что не должно быть промежуточного экрана входа в систему (a.k.a прямой вход в систему от поставщика услуг), поэтому OAuth2 с предоставлением пароля кажется лучшим вариантом здесь.
Пользователь только для чтения, аутентификация используется только для доступа к определенному контенту, который одинаков для всех пользователей, пользователи не могут изменять свои личные данные или что-либо еще. Мы используем ID пользователя в качестве имени пользователя и дату рождения в качестве пароля, это не совсем безопасно, но это не то, что мы можем контролировать, потому что мы получаем учетные данные от других сторонних сервисов, хотя мы все еще хотим сделать все максимально безопасным, потому что пользовательские данные включают в себя такие личные данные, как полное имя и домашний адрес.
Чтобы было понятно, далее я опишу, как я представляю поток OAuth2 и SSO для совместной работы:
base64(client_id:secret)
)Так что в значительной степени, как будет работать предоставление пароля OAuth2, вероятно, самая сложная часть — заставить его работать с SSO, я не мог найти какие-либо работающие реализации без сохранения состояния, поэтому придумал это:
Таким образом, токен доступа может использоваться только поставщиком услуг, для которого он был выдан. И токен обновления может использоваться всеми поставщиками услуг, но для выдачи нового токена доступа должны быть указаны идентификатор клиента и секрет, поэтому один токен обновления бесполезен.
Также забыл упомянуть, что все сайты используют TLS.
Что вы думаете об этой реализации, достаточно ли она безопасна? Может быть, у вас есть другие предложения?
Задача ещё не решена.
Других решений пока нет …