Единый вход Azure Active Directory с веб-формами Asp.net - PullRequest
1 голос
/ 10 апреля 2019

У нас есть приложение Asp.Net Webforms в .Net 3.5, которое уже имеет модуль аутентификации с FormsAuthentication. Для нового требования нам нужно внедрить единый вход (SAML) с Azure Active Directory.

Мы выполнили необходимые настройки в Azure AD, следуя статье https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-single-sign-on-non-gallery-applications. Следующим шагом является получение значения заявки из ответа SAML из Azure AD. Мы определили ответ SAML, используя расширение SAML Tracer в Firefox. Ниже приведен скриншот ответа SAML.

enter image description here

Как проанализировать этот ответ на странице входа в приложение с помощью C # и извлечь значение претензии?

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Вы можете использовать Windows Identity Foundation 3.5 , который добавляет поддержку протокола WS-Federation в приложения ASP.NET..Net Framework 3.5 не поддерживает протокол SAML.Azure AD поддерживает протоколы WS-Federation и SAML для единого входа.

Инструкции по настройке единого входа Azure AD для протокола WS-федерации.Инструкции аналогичны инструкциям SAML.

Windows Identity Foundation 3.5 предоставляет два модуля HttpMo для IIS, поддерживающих аутентификацию WS-Federation: WSFederationAuthenticationModule и SessionAuthenticationModule.

Windows Identity Foundation 3.5 SDK

Если вы сможете обновить свое приложение до .Net Framework 4.5, вы получите выгоду от полной интеграции Windows Identity Foundation 4.5 в саму .Net Framework..

0 голосов
/ 22 апреля 2019

Я рекомендую вам использовать ADFS 2.0, она очень полезна с точки зрения сопоставления заявок и работает с AD.

http://msdn.microsoft.com/en-us/magazine/ee335705.aspx

Ваше приложение получит и проанализирует возвращенные окончательные заявкина ваш веб-сервер после цикла аутентификации.

Единственная проблема заключается в том, что ADFS работает только с AD, поэтому он будет работать как IdP, если предположить, что все поставщики удостоверений основаны на AD.Для других LDAP вы должны искать другие решения.

Также для ответа SAML, это ввод XML, который вы можете прочитать, как показано ниже

XDocument responseDoc = XDocument.Load(@"XMLFile1.xml");
XNamespace pr = "urn:oasis:names:tc:SAML:1.0:protocol";
XNamespace ast = "urn:oasis:names:tc:SAML:1.0:assertion";


XElement status = responseDoc.Element(pr + "Response").Element(pr + "Status");
string statusCode = (string)status.Element(pr + "StatusCode").Attribute("Value");
string statusMessage = (string)status.Element(pr + "StatusMessage");

Console.WriteLine("Status code: {0}; message: {1}.", statusCode, statusMessage);

XElement attStatement = responseDoc.Element(pr + "Response").Element(ast + "Assertion").Element(ast + "AttributeStatement");
string surname = (string)attStatement.Elements(ast + "Attribute").First(a => a.Attribute("AttributeName").Value == "Surname").Element(ast + "AttributeValue");
string firstname = (string)attStatement.Elements(ast + "Attribute").First(a => a.Attribute("AttributeName").Value == "FirstName").Element(ast + "AttributeValue");
string nrn = (string)attStatement.Elements(ast + "Attribute").First(a => a.Attribute("AttributeName").Value == "NRN").Element(ast + "AttributeValue");

Console.WriteLine("First name: {0}, last name: {1}; NRN: {2}", firstname, surname, nrn);

Проверьте эту ветку для получения дополнительной информации

https://forums.asp.net/t/1490469.aspx?parse+SAML+XML+response

надеюсь, это поможет.

...