Внедрение SAML 2.0 в качестве поставщика услуг с ASP.NET 4.5+

Мне трудно получить четкие указания из различных источников о том, как изменить мое существующее приложение ASP.NET (не MVC, если это имеет значение — старые веб-формы, основанные на проверке подлинности на основе форм), чтобы принимать единый вход для пользователей через SAML. В частности, мы ищем подключение к Okta. У меня работает OpenID Connect с Okta, но нашим клиентам особенно нужен SAML через Okta. Мы также хотели бы в будущем поддерживать других поставщиков удостоверений через SAML.

Я настроил приложение в Okta и получил свой сертификат x509 и метаданные, но мне трудно двигаться дальше. Я читал много противоречивой информации: в некоторых источниках говорится, что SAML2 встроен в .Net 4.5 и выше, но в других говорится, что он не поддерживает протокол SAML2, и я не нашел для него хороших примеров, которые не были бы тесно связаны с Azure и ADFS. Я просмотрел этот репозиторий, но, по-видимому, он не поддерживает SHA256, который я получил от Okta. . Также очень не хватает документации по этой библиотеке. Большинство моих поисков в Интернете, похоже, находят устаревшую или противоречивую информацию о том, как реализовать SSO через SAML в .Net.

Собственная документация Okta сосредоточена на OIDC или их собственном API, оставляя реализацию SAML на усмотрение интегратора.

Может ли кто-нибудь указать мне на несколько текущих примеров для ASP.Net SSO с SAML2? Предпочтительно приложение веб-форм, а не MVC.

Заранее спасибо.


person Jeff Anderson    schedule 14.03.2018    source источник


Ответы (1)


В конце концов, все, что вам нужно сделать, это предоставить новую конечную точку SAML в своем приложении и обрабатывать входящие и исходящие данные. Все, что он делает, это определяет, есть ли у пользователя сеанс в вашем приложении. Если нет, перенаправьте их к их IdP с помощью SAMLRequest и подождите, пока браузер вернется к вашей конечной точке ACS (Attribute Consumer Service) с SAMLResponse. Если атрибуты в SAMLResponse адекватны, зарегистрируйте пользователя в своем приложении.

SAML ничего не знает о логинах, сессиях и подобных вещах приложений. Это просто пакет XML с вещами, которые вы используете для управления логинами и т. д.

Обычный способ входа в систему с именем пользователя/паролем выглядит примерно так:

https://yourapp.com/login

поэтому SAML может быть:

https://yourapp.com/sso

для поддержки нескольких поставщиков удостоверений добавьте параметр entityID:

https://yourapp.com/sso?entityID=https://some.idp.com/shibboleth

вы загружаете URL-адрес страницы входа IdP из его метаданных, которые вы загружаете с помощью параметра entityID. Отправьте браузер на этот URL-адрес, чтобы запустить процесс SAML.

Итак, процесс более-менее:

  1. пользователь обращается к вам /sso?entityID=blah endpoint
  2. загрузить метаданные SAML для entityID и получить URL-адрес единого входа
  3. перенаправить браузер на URL SSO с SAMLRequest, закодированным в форме
  4. получить браузер на конечной точке ACS с закодированным SAMLResponse от IdP
  5. анализировать SAMLResponse, чтобы получить атрибуты SAML и проверить их на пригодность
  6. авторизовать пользователя

Вам потребуются метаданные SAML для каждого поставщика удостоверений, с которым вы собираетесь работать, а им потребуются метаданные SAML вашего приложения, поскольку вы выступаете в качестве SP (поставщика услуг).

person codebrane    schedule 15.03.2018
comment
Да, я должен был упомянуть, что я знаком с процессом. Мой вопрос более конкретно касается деталей реализации в Asp.Net. У вас есть библиотека, которую вы могли бы порекомендовать, или несколько подробных примеров в Asp.Net? Большая часть того, с чем я столкнулся, плохо документирована (например, библиотека, на которую я ссылался), или устарела/устарела. - person Jeff Anderson; 15.03.2018