【问题标题】:Azure Active Directory SSO with Asp.net WebformsAzure Active Directory SSO 与 Asp.net Webforms
【发布时间】:2019-04-10 18:07:20
【问题描述】:

我们在 .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 响应屏幕截图如下。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    唯一的问题是 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

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      您可以使用Windows Identity Foundation 3.5,它将对WS-Federation 协议的支持添加到ASP.NET 应用程序。 .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:WSFederationAuthenticationModule 和 SessionAuthenticationModule。

      Windows Identity Foundation 3.5 SDK

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2020-10-30
        相关资源
        最近更新 更多