Я создал веб-сайт, который позволяет пользователю проходить аутентификацию по oauth2 (от другого провайдера), основной поток (при условии, что новый пользователь):
- Пользователь загружает мою веб-страницу
- Ключ и секрет токена запроса OAuth предоставляются конечной точкой OAuth
- Я сохраняю токен запроса в куки пользователя
- Пользователь перенаправляется на страницу аутентификации OAuth от внешнего провайдера
- Пользователь принимает и перенаправляется на мою веб-страницу с параметрами URL, которые указывают верификатор OAuth и токен OAuth
- Использование токена запроса (полученного из файлов cookie) и верификатора OAuth (передаваемого через параметры URL)), Я могу получить ключ и секретный ключ доступа от конечной точки OAuth.
- Теперь я могу аутентифицироваться с помощью API провайдера и использовать его для получения идентификатора пользователя, вошедшего в систему.
- Я удаляю токен запроса из файлов cookie пользователя и вместо этого сохраняю идентификатор пользователя и мойсгенерированный токен.
Когда пользователь возвращается на мой веб-сайт, я проверяю, хранятся ли у него идентификатор пользователя и токен в его файлах cookie, и если я пытаюсь найти OAuth-токен и секрет из MySQL,Если они найдены, я проверяю, что они все еще действительны (принимает ли их конечная точка API), и если это так, пользователь остается «авторизованным» на моем веб-сайте.В случаях, когда идентификатор пользователя или токен не найден в MySQL, или если найден , но не принят конечной точкой (истек?), Я просто возвращаюсь черезпоток выше.
Выше все работает правильно, новые пользователи могут успешно аутентифицироваться, возвращающиеся пользователи обнаруживают, что сайт их запоминает.Я не предоставляю пользователю ключ токена OAuth или секрет и вместо этого даю пользователю этот идентификатор токена, который я генерирую.
Есть ли какие-либо проблемы с тем, что я делаю?
- Должен ли я шифровать ключ и секретный ключ OAuth в своей базе данных?
- Есть ли проблема с тем фактом, что если кто-то получит доступ к сгенерированному мной токену вместе с идентификатором пользователя, он сможетназывать мои сценарии.Это проблема?
- Должен ли я шифровать идентификатор пользователя и токен, которые я генерирую, перед тем как сохранить его в файлах cookie пользователя?Принимая во внимание, что в конечном итоге все, что хранится в cookie-файлах пользователя, будет передано моему сценарию, поэтому, если бы мне пришлось шифровать, сохранять в cookie-файлах, а затем в следующий раз при чтении из cookie-файлов и расшифровке пользователь все равно мог бы получить доступ к моим конечным точкампросто передать зашифрованную версию (при условии, что сервер расшифровывает, если клиент расшифровывает, тогда ключ дешифрования будет доступен через браузер пользователя в любом случае), что, по-видимому, не сразу обеспечивает дополнительную безопасность.
Моя цель - ужесточить вышеперечисленные шаги, чтобы он был надежным и безопасным.Фактический вариант использования моего веб-сайта означает, что его будет использовать лишь небольшое количество пользователей (если оно есть).Для меня это был скорее учебный процесс в сочетании с реализацией того, что мне действительно нужно.Но для одного аспекта обучения я хотел бы сделать все разумным и безопасным.Я не пытаюсь быть чрезмерно педантичным и выполнять шаги, которые не выполнялись бы на других подобных сайтах, в основном я хотел бы, чтобы мой сайт был достаточно безопасным, чтобы в случае возникновения проблемы никто не мог указать на меня пальцем и сказать, что я этого не делалвнедрить адекватную систему безопасности.