Реализация сценария, инициированного SP, с использованием библиотеки SAML2

Мы являемся поставщиком услуг и пытаемся реализовать систему единого входа, инициированную поставщиком услуг, с помощью библиотеки SAML2. У меня есть следующие вопросы

  1. Когда конечный пользователь пытается получить доступ к защищенному приложению / ресурсу SP, как конечная точка SP должна идентифицировать, к какому IDP она должна перенаправить запрос на аутентификацию?

  2. Есть ли какой-либо стандартный формат для принятия первого / первоначального запроса от пользователя IDP?

  3. Какой стандартный формат отправки ответа IDP при перенаправлении запроса к IDP?

Наш технический стек: asp .net (4.5) MVC, C # и SAML2 Библиотека Sustainsys

Наш клиент (в терминологии SSO IDP - идентификация поставщика) использует: SAML, инициированный SP в Azure AD.

Используя библиотеку SAML2, я реализовал систему единого входа, инициированную IDP, при которой IDP достигает конечной точки с помощью ответа SAML, и мы проверяют его с помощью сертификата IDP, извлекают атрибуты и т. д.

Итак, для инициированного SP я получил следующее:

[Route("RequestAccess")]
[HttpPost]     
public ActionResult InitialRequest()
{
   // How to Identify user and its IDP url?
   // What should be the return type? (To redirect user to IDP)
}

// После проверки IDP может попасть в нашу существующую конечную точку, которая проверяет утверждение и перенаправляет пользователя. Я реализовал эту часть и хорошо работает в случае настройки, инициированной IDP.

[Route("AssertionConsumer")]
[HttpPost]
public ActionResult ValidateIdpRequest()
{
   var options = Saml2Controller.Options; //Coming from config
   CommandResult result = CommandFactory.GetCommand(CommandFactory.AcsCommandName)
                                     .Run(Request.ToHttpRequestData(),options);
string userName = result.Principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
//Set the cooking in response
//Return
}

Что мне не хватает? Любые предложения / вопросы приветствуются.

Для сценария, инициированного SP, все, что я нашел в Интернете, не содержит примеров или четких объяснений.


person S52    schedule 09.01.2019    source источник
comment
Пожалуйста, не редактируйте свой вопрос, чтобы добавить больше вопросов. Если мой опубликованный ответ охватывает ваш первоначальный вопрос, отметьте его как принятый. Публикуйте любые новые вопросы как новый вопрос.   -  person Anders Abel    schedule 11.01.2019
comment
@AndersAbel Хорошо, спасибо.   -  person S52    schedule 11.01.2019


Ответы (1)


  1. Эта проблема называется «обнаружением домашнего царства». Как-то многое выбирает пользователь. Иногда это делается путем представления списка Idps, из которого пользователь может выбирать. Иногда это делается путем предоставления разных URL-адресов разным пользователям (например, customerX.myservice.com), где каждый поддомен customerX сопоставляется с определенным Idp. Для решения этой проблемы библиотека Sustainsys.Saml2 поддерживает стандарт службы обнаружения SAML2.

  2. Вы сами используете низкоуровневую библиотеку Sustainsys.Saml2, которая дает вам множество возможностей для самостоятельной работы. Он не предназначен для прямого использования. Вместо этого используйте высокоуровневую библиотеку Sustainsys.Saml2.Owin или Sustainsys.Saml2.Mvc. Он выполнит перенаправление и обработает возвращенный результат за вас.

  3. См. 2.

person Anders Abel    schedule 10.01.2019
comment
Спасибо за подробное объяснение. Я обновил вопрос дополнительным вопросом. Просто хотел узнать, как я могу настроить Consumer Url утверждения при перенаправлении запроса? Еще раз спасибо! - person S52; 11.01.2019