带有Asp.net Webforms的Azure Active Directory SSO

时间:2019-04-10 18:07:20

标签: c# asp.net azure-active-directory single-sign-on saml-2.0

我们在.Net 3.5中有一个Asp.Net Webforms应用程序,该应用程序已经具有带有FormsAuthentication的身份验证模块。对于新要求,我们需要使用Azure Active Directory实施SSO(SAML)。

我们已经按照文章https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-single-sign-on-non-gallery-applications在Azure AD中进行了必需的配置。 下一步是从Azure AD的SAML响应中检索索赔值。我们使用Firefox中的SAML Tracer扩展标识了SAML响应。 SAML响应屏幕截图如下。

enter image description here

如何使用C#在应用程序的“登录”页面中解析此响应并提取索赔值?

2 个答案:

答案 0 :(得分:0)

我建议您使用ADFS 2.0,它在声明映射方面非常有用,并且可以与AD一起使用。

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

您的应用将在身份验证循环后接收并解析返回给Web服务器的最终声明。

唯一的问题是ADFS仅适用于AD,因此如果我们假设所有身份提供者都基于AD,它将作为IdP起作用。对于其他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

希望有帮助。

答案 1 :(得分:0)

您可以使用Windows Identity Foundation 3.5向ASP.NET应用程序添加对WS-Federation协议的支持。 .Net Framework 3.5不支持SAML协议。 Azure AD支持SSO的WS-Federation和SAML协议。

Azure AD SSO Configuration instructions用于WS-Federation协议。说明与SAML类似。

Windows Identity Foundation 3.5为支持WS-Federation身份验证的IIS提供了两个HttpModule:WSFederationAuthenticationModuleSessionAuthenticationModule

Windows Identity Foundation 3.5 SDK

如果您可以将应用程序升级到.Net Framework 4.5,则将从Windows Identity Foundation 4.5完全集成到.Net Framework本身中受益。