Мой сайт используется несколькими компаниями. Эти компании хотят внедрить SSO. Поэтому они заходят на портал своей компании и нажимают ссылку на мой сайт. Они заходят на домашнюю страницу моего сайта без входа в систему. Мой сайт на php. Разные компании могут иметь свой сайт на любом языке. Мы хотим, чтобы это было как можно более общим, чтобы все компании могли его использовать. Он также должен быть безопасным по очевидным причинам, а также потому, что мы являемся медицинской компанией с phi.
Я много читал о simpleSAMLphp, но я просто не уверен, прав ли я, как это реализовать.
Должен ли я просто настроить свой веб-сайт как SP с simpleSAML и сказать другим компаниям: «Это то, что я использую, создайте Idp и отправьте мне правильные данные»? Есть ли другой способ пойти по этому поводу?
Да, в значительной степени.
Вы отправляете компаниям свои метаданные SP, и они импортируют их, а затем отправляют вам свои метаданные IDP, а вы импортируете их.
Уловка — это «первичный ключ», т. Е. Как пользователь в другой системе сопоставляет пользователя в вашей. Для этого обычно используется NameID, и он может иметь несколько форматов.
Опять же, это все в метаданных.
Еще одна очень полезная часть работы в качестве поставщика услуг (SP) в интеграции SAML — наличие службы обнаружения IdP. Поскольку каждый из ваших партнеров будет обмениваться метаданными с вашей организацией, каждый из них по сути является двухточечным соединением SAML. Служба обнаружения IdP использует что-то в запросе для идентификации партнера и запуска транзакции SSO, инициированной SP SAML. Одной из распространенных стратегий является использование именования URL, например yourpartner.company.com. Затем служба обнаружения IdP обнаруживает поддомен «ваш партнер» в URL-адресе и затем вызывает соответствующую транзакцию SP. Есть и другие стратегии, но я считаю, что эта работает лучше всего для большинства организаций.
Что ж, если вы хотите обеспечить хороший сервис, подумайте, что вам придется поддерживать несколько протоколов SSO, и пусть клиенты выбирают. Помимо SAML есть OAuth OpenID Connect и JWT, которые я бы назвал относительно простыми и хорошо принятыми. Я считаю JWT особенно простым и удобным в использовании.
Что касается реализации SAML PHP, я пробовал использовать simpleSAML, но оказалось, что его слишком сложно интегрировать в существующее приложение. Я предпочитаю lightSAML библиотека, которая на самом деле v2 из aerialship / lightsaml, тем более, что мое приложение было в Symfony, а у lightsaml был пакет безопасности.