Одинаковый uri перенаправления для нескольких провайдеров в oidc

Я хочу, чтобы мое приложение проверяющей стороны (RP) могло подключаться к любому поставщику oidc. Это означает, что пользователи смогут настроить любого поставщика удостоверений, поддерживающего openid connect.

Поэтому я хочу, чтобы в моем приложении RP был один uri перенаправления, например

http://www.example.com/auth/callback

Так что все IDP будут вызывать один и тот же в потоке кода аутентификации.

Как RP будет различать каждого IDP? и знаете, к какому IDP обратиться для завершения потока oauth?


person Michael    schedule 19.02.2019    source источник
comment
Могу я спросить, как приложение знает, какого провайдера использовать? Кажется, курица и яйцо. Пользователь указывает поставщика, но пользователь не аутентифицирован. Сам пробую нечто подобное и езжу по кругу. Надеюсь, что все пользователи смогут получить доступ через один и тот же URL-адрес, но все, что я могу думать, это отдельные URL-адреса для каждого пользователя ... спасибо   -  person Tree Frog    schedule 14.11.2019


Ответы (1)


Вы можете использовать параметр state запроса аутентификации:

state Непрозрачное значение, используемое для поддержания состояния между запросом и обратным вызовом ...

Значение состояния будет содержать как случайную часть, так и идентификатор привилегированного пользователя. Например "google-A41DsGDm". Поставщик аутентификации должен возвращать то же значение состояния, что и URL-адрес перенаправления, содержащий код аутентификации. Таким образом, ваш /auth/callback обработчик будет знать, какую /token конечную точку провайдера аутентификации вызывать для получения токенов (после проверки случайной части значения состояния).

Для полноты картины, если вы просто хотите использовать один внутренний обработчик, вы можете сопоставить все URI, начинающиеся с /auth/callback, с обработчиком и принять следующий параметр пути в качестве идентификатора поставщика аутентификации. Например /auth/callback/google?code=....

person Ján Halaša    schedule 19.02.2019
comment
вы должны знать о рекомендации, что можно использовать разные URI перенаправления для предотвращения атак смешивания IDP: tools.ietf.org/html/ - person Hans Z.; 19.02.2019
comment
Кто выбирает имя idp? Если у меня есть предопределенный список, то это не совсем общий подход для любого idp. Если пользователь выбрал имя idp, мне придется каким-то образом связать имя с конкретным idp. Один пользователь может написать google, а другой - goog, но мне нужно знать, что оба они имеют в виду Google. Возможно, мне нужно сгенерировать случайный идентификатор для idp и сопоставить его с конкретным idp. Например, ukjsd3hb будет сопоставлен с Google, и я запрошу базу данных, чтобы найти сопоставление и использовать /auth/callback/ukjsd3hb?code=... в качестве обработчика. - person Michael; 20.02.2019
comment
Я хотел сказать, что когда пользователь впервые настраивает сервер аутентификации в моем приложении, ему дается случайный идентификатор, который они должны будут ввести в настройках своего сервера аутентификации. Я буду знать отображение (поиск в базе данных) - person Michael; 20.02.2019
comment
Как вы создадите идентификатор и предотвратите дублирование, зависит от вас. Он не должен быть удобочитаемым. Но если вы сгенерируете его в своем приложении, пользователю придется сначала сгенерировать идентификатор, а затем настроить URI перенаправления клиента у поставщика аутентификации. - person Ján Halaša; 20.02.2019