使用ASP.NET WebForms的Azure Active Directory SSO

Azure Active Directory SSO with Asp.net Webforms(使用ASP.NET WebForms的Azure Active Directory SSO)
本文介绍了使用ASP.NET WebForms的Azure Active Directory SSO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们在.NET3.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#在应用程序的登录页面中解析此响应并提取声明值?

推荐答案

我建议您使用ADFS2.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

希望它能有所帮助。

这篇关于使用ASP.NET WebForms的Azure Active Directory SSO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)