Поскольку OpenIDConnect основан на OAuth2, SSO, инициируемая IdP, технически должна быть возможна, но при одном условии - SP не полагается на состояние, переданное IdP в первоначальном запросе, когда состояние действует как anti маркер фальсификации (т.е. по запросу на возврат состояние возврата сравнивается с состоянием, отправленным SP в первоначальном запросе).
Более длинный ответ будет:
Первый шаг кода авторизации Поток OAuth2 - это SP, перенаправляющий на IdP, и IdP перенаправляет обратно с одним временным кодом. Параметр state
часто передается SP, и SP ожидает, что состояние будет возвращено обратно.
Есть два случая.
SP проверяет состояние (например, сравнивает его с состоянием, хранящимся во временном cookie). Единый вход в систему IdP не будет работать, поскольку IdP никак не может знать / подделывать состояние, и поэтому он не может выдать действительный запрос поставщику услуг, который будет действовать как инициированный IdP единый вход.
ИП не проверяет состояние. Затем IdP может выдать ответ на обычный запрос OAuth2, но без фактического запроса, то есть он перенаправляет на
https://sp.com/oauth2?code=...authcode
и SP выбирает рукопожатие OAuth2 оттуда, как если бы SP первым инициировал рукопожатие.
Другими словами, возможен ли SSO, инициированный IdP, это зависит только от SP. Поскольку spec рекомендует с использованием state
для предотвращения такого поведения (классифицируется там как CSRF), я считаю, что вы здесь сами по себе. Также читайте подробнее о возможных проблемах безопасности, связанных с параметром state
.
3.1.2.1. Состояние запроса аутентификации […] - РЕКОМЕНДУЕТСЯ. Непрозрачное значение, используемое для поддержания состояния между запросом и обратным вызовом. Обычно смягчение межсайтовых запросов (CSRF, XSRF) выполняется путем криптографического связывания значения этого параметра с файлом cookie браузера.