Лучший способ настроить SSI с помощью SAML и Azure AD - PullRequest
0 голосов
/ 26 октября 2018

Исходя из этой статьи, у меня сложилось впечатление, что вы можете использовать стандарт SAML для аутентификации пользователей в вашем веб-приложении с помощью Azure AD:

https://docs.microsoft.com/en-us/azure/active-directory/develop/single-sign-on-saml-protocol

Однако этоне все ясно, на всех маленьких шагах, необходимых для этого.Итак, я попробовал и сделал следующее, чтобы выяснить для себя первый шаг, который заключается в получении URL-адреса, необходимого поставщику услуг для перенаправления браузера для аутентификации с использованием IdP (т. Е. Azure AD):

  • Я установил отдельную AD в Azure на свободном уровне.
  • В этой AD я создал приложение.
  • В приложении не было возможности настроить SSI

Затем я использую следующий код для генерации URL-адреса для запроса браузера SAML:

using System;
using System.IO;
using System.IO.Compression;
using System.Text;

namespace AzureSAMLExperiment
{
    class Program
    {
        // Call to https://login.microsoftonline.com/common/FederationMetadata/2007-06/FederationMetadata.xml returns the SingleSignOnService element below:

        public const string SingleSignOnServiceUrl = "https://login.microsoftonline.com/common/saml2";
        public const string SingleSignOnQueryString = "?SAMLRequest={0}";

        static void Main(string[] args)
        {
            // See https://docs.microsoft.com/en-us/azure/active-directory/develop/single-sign-on-saml-protocol
            var SAMLRequestXML = $@"<samlp:AuthnRequest
xmlns=""urn:oasis:names:tc:SAML:2.0:assertion""
ID=""id6c1c178c166d486687be4aaf5e482730""
Version=""2.0"" IssueInstant=""{DateTime.UtcNow.ToString("o")}""
xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol"">
<Issuer xmlns=""urn:oasis:names:tc:SAML:2.0:assertion"">ISSUER</Issuer>
</samlp:AuthnRequest>";

            var url = $"{SingleSignOnServiceUrl}?SAMLRequest={DeflateEncode(SAMLRequestXML)}";
        }

        private static string DeflateEncode(string val)
        {
            var memoryStream = new MemoryStream();
            using (var writer = new StreamWriter(new DeflateStream(memoryStream, CompressionMode.Compress, true), new UTF8Encoding(false)))
            {
                writer.Write(val);
                writer.Close();

                return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length, Base64FormattingOptions.None);
            }
        }
    }
}

И поместите полученный URL в браузер.

Я испробовал несколько разных значений для ISSUER, включая

Но ничего из этого не сработало.

Как видите, я использую общий URL-адрес, а не адрес клиента.Я не уверен, какой из них лучше всего использовать.

В каждом случае при посещении URL я получал следующий ответ:

enter image description here

Итак, есть ли какие-либо указания относительно того, что я сделал неправильно?

  • Нужна ли мне реклама AD премиум-уровня или все в порядке?
  • Должен ли я использовать арендатора или общую конечную точку?*
  • Что-то не так с XML или кодировкой, которую я использовал?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Да, вам нужен Azure AD Premium.

Вот пример с использованием настраиваемого подключения SAML.

Затем Azure AD / Приложения предприятия / SSO.

0 голосов
/ 26 октября 2018

Azure AD предоставляет активную службу каталогов бесплатно.Для подключения к активному каталогу по протоколу SAML необходимо перейти на платный тариф.Когда вы подключитесь к платному плану и настроите настройку SAML, Azure будет действовать как SAML IdP (поставщик удостоверений).На этом этапе я бы порекомендовал протестировать поток аутентификации с использованием внешней службы IAM, настроенной как SAML SP (поставщик услуг), а не самостоятельно разрабатывать решение.Например, вы можете попробовать Auth0 как SAML SP для этой цели.

Архитектура будет выглядеть примерно так с описанной выше настройкой;

Your App <= OAuth => Auth0 <= SAML => Azure AD

Если вы не хотите платить Azure за поддержку SAML, вы можете объединить пользователейв Azure AD с протоколом WsFed.Это также поддерживается с Auth0 .

Your App <= OAuth => Auth0 <= WsFed => Azure AD

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

Отказ от ответственности: я работаю на Auth0.

...