Исходя из этой статьи, у меня сложилось впечатление, что вы можете использовать стандарт 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 я получал следующий ответ:
Итак, есть ли какие-либо указания относительно того, что я сделал неправильно?
- Нужна ли мне реклама AD премиум-уровня или все в порядке?
- Должен ли я использовать арендатора или общую конечную точку?*
- Что-то не так с XML или кодировкой, которую я использовал?