IdP инициировал вход в систему с помощью ThinkTecture IdentityServer v3

Резюме

В SAML существует концепция инициированного IdP входа в систему, означающая, что Идентифицирующая сторона (IdP) может отправлять незапрошенный токен Проверяющей стороне (RP / приложение-потребитель), и пользователь может войти в систему, даже не обращаясь к IdP., У меня есть сценарий, где мне нужно это сделать, но я хочу, чтобы ThinkTecture Identity Server v3 находился посередине, так как я буду обрабатывать свою обычную аутентификацию (как в повседневных вещах, отличных от SAML). Я не могу позвонить в SAML IdP по независящим от меня причинам. Что я хотел бы сделать, это:

IdP инициировал SSO через Identity Server

Я потратил немало времени, чтобы посмотреть на это, и я также посмотрел на спецификацию, в которой говорится о начале входа в систему от третьей стороны, но если я правильно понимаю, она все равно начинается с того, что третья сторона направляет пользователя в RP, который затем отправляет запрос на вход в систему IdP (который является сервером удостоверений ThinkTecture), что на самом деле не то, что мне нужно.

Таким образом, я не думаю, что OpenID Connect имеет эквивалент SSO, инициированного IdP SAML. Это правильно, или я просто не могу понять это, или же ThinkTecture IdentityServer не поддерживает это?

Подробнее

  • Я успешно использовал промежуточное программное обеспечение AuthServices OWIN компании KentorIT для внедрения инициируемого IdP единого входа SAML непосредственно на веб-сайт, вообще не используя IdSrv.
  • Я также интегрировал ПО Middleware OWIN от Kentor с IdSrv, чтобы мой веб-сайт перенаправлялся на IdSrv, который затем перенаправляет на сервер SAML, где я вхожу, возвращаюсь в IdSrv, который затем переводит токен SAML и отправляет токен OpenID Identity обратно на мой сайт,
  • Для забавы я также использовал библиотеку Кентора, чтобы просто иметь контроллер MVC, который распаковывает токен SAML, поэтому, если бы я захотел, я мог бы выполнить некоторую ручную аутентификацию с этим.

Все это работает довольно красиво, большое спасибо ThinkTecture и KentorIT. Увы, все это все еще начинается с моего веб-сайта и заканчивается перенаправлением на сервер SAML, чего я не могу сделать в моем сценарии по нетехническим причинам.

Альтернативное решение

Конечно, я могу просто полностью отказаться от IdSrv в этом сценарии, но у меня есть причины для того, чтобы IdSrv находился посередине и чтобы вся моя аутентификация проходила через это. Итак, на данный момент я думаю сделать этот поток:

  1. Сервер SAML отправляет токен SAML на определенный URL-адрес на моем веб-сайте.
  2. Мой веб-сайт повторно отправит этот токен на Identity Server как есть. На Identity Server установлено промежуточное программное обеспечение KentorIT OWIN, поэтому пользователь просто войдет в IdSrv, что означает, что IdSrv устанавливает файл cookie для аутентификации.
  3. IdSrv выполняет простое перенаправление на другой URL на моем веб-сайте и не содержит никаких токенов. Пока что это не имеет ничего общего с IdSrv.
  4. Мой сайт теперь выдает запрос на аутентификацию IdSrv
  5. Поскольку пользователь уже вошел в IdSrv, IdSrv немедленно ответит и перенаправит пользователя обратно на мой сайт с Identity TokenАльтернативное решениеЭто много перенаправлений, но это должно работать.

Прежде чем я начну реализовывать это, кто-нибудь может сказать мне, если это правильный путь, или я упускаю что-то действительно очевидное?

РЕДАКТИРОВАТЬ 1

Похоже, эта идея тоже не сработает. По сути, мне нужно использовать единый вход SAML, инициированный IdP, для аутентификации на Identity Server, затем перенаправить на RP и заставить RP перенаправить на Identity Server с запросом аутентификации. Однако, насколько я могу судить, Identity Server не может войти в систему, кроме как в части запроса RP. Другими словами, несмотря на то, что мое промежуточное программное обеспечение SAML успешно принимает незапрошенный токен, IdSrv игнорирует запрос промежуточного программного обеспечения SAML для его входа в систему (что, я полагаю, достаточно справедливо).

Итак, я думаю, что альтернативным решением является написание контроллера, который может проверять токен SAML и напрямую вызывать IdSrv в коде, запущенном на том же сервере, и предлагать ему войти в систему с принципалом, который я создаю вручную.

(Новый) вопрос: предоставляет ли Identity Server механизм для входа пользователя в коде, чтобы Identity Server устанавливал соответствующие файлы cookie для пользователя?

1 ответ

Короткий ответ: в данный момент это невозможно.
Я открыл проблему с Identity Server и на данный момент разработал некоторый проверочный код.
Этот ответ пока только здесь, как заполнитель - когда появится решение, я обновлю этот ответ с разумным уровнем детализации.

Другие вопросы по тегам