Параметр ValidateIssuer в аутентификации подключения OpenID - PullRequest
1 голос
/ 19 апреля 2019

Мы используем библиотеку OIDC, и на данный момент мы разрешаем только вход в MSA. Итак, мы настроили параметры ValidateIssuer = true и Validissuers = https://login.microsoftonline.com/..” Однако теперь нам нужно подключить к нашему приложению других арендаторов AAD (например, abc@dell.com), поэтому мы решили установить ValidateIssuer = false.

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

Я просмотрел документы AAD, опубликованные здесь , и все еще не смог найти убедительного ответа на комментарии к фрагменту кода:

        // ValidateIssuer set to false to allow work accounts from any organization to sign in to your application
        // To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name or Id (example: contoso.onmicrosoft.com)
        // To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
        TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateIssuer = false
        },

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Как уже упоминалось в другом ответе, если вы оставите ValidateIssuer = false, то промежуточное ПО OIDC не будет пытаться проверить клиента-эмитента, и это фактически будет означать, что ваше приложение открыто для всех, у кого есть пользователь в Azure AD.

Некоторые предложения по решению мультитенантного дела

  1. Если вы заранее знаете список действительных эмитентов, используйте список эмитентов в TokenValidationParameters.ValidIssuers. Пример:

      ValidIssuers = new List<string>()
      {
          "https://sts.windows.net/6d9c0c36-c30e-442b-b60a-ca22d8994d14/",
          "https://sts.windows.net/f69b5f46-9a0d-4a5c-9e25-54e42bbbd4c3/",
          "https://sts.windows.net/fb674642-8965-493d-beee-2703caa74f9a/"
      }
    
  2. Если действительные издатели для вашего приложения являются динамическими или если вы хотите написать некоторую логику для сбора этого списка, вы можете написать реализацию для TokenValidationParameters.IssuerValidator, которая имеет вашу собственную логику. Вам просто нужно установить делегат, который будет использоваться для проверки подлинности эмитента.

        TokenValidationParameters validationParameters = new TokenValidationParameters
        {            
            ValidateIssuer = true,
    
            // Set this to a delegate and write your own custom implementation there. See code sample URL ahead for more details.
            IssuerValidator = AadIssuerValidator.ValidateAadIssuer
        };
    
  3. Если ни один из случаев не имеет смысла, и ваша логика проверки не связана с арендатором, которому принадлежит вызывающая сторона, установите для TokenValidationParameters.ValidateIssuer значение false, но убедитесь, что вы добавляете свою пользовательскую логику в конце, например в SecurityTokenValidated уведомления.

Пример кода

Создание мультитенантного веб-приложения SaaS с использованием Azure AD и OpenID Connect

Посмотрите внимательно на эти файлы в этом примере:

1 голос
/ 20 апреля 2019

Этот флаг позволяет обработчику аутентификации OpenID Connect, чтобы убедиться, что человек, который входит в ваше приложение, происходит от известного клиента AAD.Если вы установите его на false, эта проверка не произойдет.Фактически это означает, что любой, кто получает доступ к вашему приложению и успешно входит в систему при перенаправлении в AAD, будет допущен к вашему приложению.

В целом, я бы сказал, что единственные два обстоятельства, которые вы хотите установить для этого флага:false - это если:

  • вы заранее не знаете, какие арендаторы могут подключиться к вашему приложению;или
  • вы хотите разрешить людям из каждого арендатора AAD подключаться к вашему приложению.

Кроме того, мне было бы интересно узнать, что вы подразумеваете под "приложением ужерезервное копирование с помощью пользовательской авторизации ".

Cheers

...