2015-01-12 2 views
0

У меня есть возможность входа в систему через Facebook и Google на моем сайте. Это делается с использованием OAuth2.Провайдер трека OAuth 2 на странице клиента

Я использую тот же URL-адрес переадресации, вернется ли пользователь из facebook или google, и передайте имя провайдера в поле состояния. Это рекомендуемый способ отслеживания провайдера? В противном случае я не знаю, кто будет проверять токен, если я не знаю, из какого провайдера появился токен.

Существуют ли другие предпочтительные способы для этого?

+0

Я бы использовал несколько разные URL-адреса. Даже параметр строки запроса. – ceejayoz

+0

Итак, мой redirectURL может содержать параметр строки запроса? –

+0

Конечно, почему бы и нет? – ceejayoz

ответ

1

Параметр state должен быть непрозрачным значением, которое нельзя угадать злоумышленником, поскольку оно не защищено от изменений. Если вам нужно отслеживать состояние, вы должны ссылаться на него, используя параметр state, но этот параметр должен быть рандомизирован и/или зашифрован. Хранение идентификатора поставщика в открытом тексте в параметре state небезопасно. Пользователи могут сами изменить параметр state, или злоумышленники могут создать запрос авторизации с выбранным им значением state.

Способ отслеживания провайдера заключается в сохранении его в состоянии бэкэнд-сессии и создании ссылки на этот сеанс/состояние, которое вы передаете в параметре state. Чтобы предотвратить подделку запросов на межсайтовый запрос, вы также должны сохранить зашифрованный/рандомизированный файл cookie, который связывает это состояние с браузером. Это описано более подробно: https://tools.ietf.org/html/rfc6749#section-10.12

Добавление:

Одна из проблем, с использованием OAuth 2.0 + поставщика конкретных расширений для входа в систему именно: вы не можете установить личность поставщика и пользователя таким образом, что работает для всех поставщиков в едином и общем виде. В вашем случае вам уже нужно знать поставщика, прежде чем вы сможете провести с ним разумное взаимодействие. Введите OpenID Connect: это профиль расширения OAuth 2.0, который стандартизован для семантики входа. Это даст вам проверяемый объект JSON (JWT) со стандартными значениями, которые сообщают вам, кто является провайдером (iss) и кто является пользователем (sub).

Объявление Google уже перенесено на OpenID Connect, так же как Microsoft и другие подобные Salesforce, надеюсь, что Facebook последует за ним.

Смежные вопросы