IDP инициировал SAML Sustainsys

Я пытаюсь настроить клиент, инициированный IDP, и наше приложение использует Sustainsys framework для всех настроек SAML в нашем IdentityServer3. Я использую эту статью в качестве справки Idp, инициированный с помощью Sustainsys

Здесь есть несколько фрагментов кода того, как работает моя текущая реализация:

var samlIdp = new Sustainsys.Saml2.IdentityProvider(new EntityId("https://<Client's IDP>"), saml2Options())
{
    MetadataLocation = "https://<client metadata>",
    LoadMetadata = true,
    AllowUnsolicitedAuthnResponse = true
};

private Saml2AuthenticationOptions saml2Options()
{
    // My clientId is for example if I'm setting up Okta, then ClientId = okta
    var spOptions = new SPOptions
    {
        ModulePath = "/<ClientId>",
        EntityId = new EntityId("https://<My identity app>/<Client Id>"),
        ReturnUrl = new Uri("https://<my Identity app>/idpinitiated?idp=<ClientId>")
    };

    return  new Saml2AuthenticationOptions(false)
    {
        SPOptions = spOptions,
        AuthenticationType = "<ClientId>",
        Caption = "<ClientId>"
    };
}

У меня проблемы:

  1. Клиент уже отправляет нам пакет saml, но наша текущая реализация пытается связаться с их идентификатором сущности IDP, отправляя запрос SAML (они этого не ожидают). Поэтому мне нужно перестать им что-то посылать и сразу перейти к проверке.
  2. Необходимо выполнить некоторые проверки на основе пакета saml, который они нам отправляют (не совсем уверен, как это сделать)

Я очень-очень новичок в этом, поэтому любая помощь будет очень оценена. Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
309
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

IdentityServer3, не поддерживает инициацию IDP. Существует обходной путь для поддержки Idsrv3, который можно выполнить, обрабатывая событие AcsCommandResultCreated (используя платформу Sustainsys saml)

private void AcsCommandResultCreated(CommandResult commandResult, Saml2Response saml2Response)
{
    var httpContext = _httpContextAccessor.HttpContext;

    var target = httpContext.Request.Query["target"].SingleOrDefault();

    if (!string.IsNullOrEmpty(target))
    {
        // Avoid an open redirect. Note that on a shared host with multiple applications running
        // in different subdirectories this check is not enough. 
        var targetUri = new Uri(target, UriKind.Relative);

        // A protocol relative url is relative, but can still redirect to another host. Block it.
        if (target.StartsWith("//"))
        {
            throw new InvalidOperationException("Protocol relative URLs are not allowed.");
        }

        commandResult.Location = targetUri;
    }
}

Полный образец: https://github.com/Sustainsys/AspNetcoreIdpInitiated

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