当前位置: 首页 > 知识库问答 >
问题:

使用Asp.net web forms的Azure Active Directory单点登录

周奇
2023-03-14

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

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

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

共有2个答案

曾皓
2023-03-14

您可以使用Windows Identity Foundation 3.5,它为ASP。NET应用程序。Net Framework 3.5不支持SAML协议。Azure AD支持SSO的WS联合和SAML协议。

适用于 WS 联合身份验证协议的 Azure AD SSO 配置说明。指令类似于 SAML 指令

Windows Identity Foundation 3.5为IIS提供了两个支持WS-Federation身份验证的HttpModule:WSFederationAuthenticationModule会话身份验证模块

Windows Identity Foundation 3.5 SDK

如果您可以将应用程序升级到。Net Framework 4.5,将Windows Identity Foundation 4.5完全集成到。Net框架本身。

焦宏硕
2023-03-14

我推荐你使用ADFS 2.0,它在声明映射方面非常有帮助,并且可以与广告配合使用。

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 响应

希望有帮助。

 类似资料:
  • 我正在尝试通过SAML请求将SSO集成到我们的ASP. NET应用程序中。我正在使用KentorAuthService库来实现这一点。使用kentor库是否是从其他身份提供者(例如(一次登录、快速身份等)进行身份验证的解决方案,或者我应该专门基于身份提供者实施。

  • 我们目前正在使用SAML2.0和ADFS 2.0为客户门户中的客户在RightNow中实现SSO,但该过程返回错误代码17:“SSO_CONTACT_TOKEN_VALIDATE_FAILED” IdP 使用联系信息(客户的登录名作为断言主体)生成已签名的 SAML 2.0 断言。ADFS 2.0 使用 HTTP POST 绑定提交以下断言: 可能是 SAML 断言中的问题吗?

  • 嗨,我正在尝试对我的登录页面进行Microsoft单点登录身份验证。为此,我已经使用它创建了Azure多租户目录,并根据给定的链接https://www.c-sharpconer.com/article/azure-ad-authentication-for-mvc-web-application/创建了带有重定向URI的应用程序。成功地集成了代码,当运行时,我在输入用户名和密码后,我在错误下面得

  • 注意 所有OAuth2 SSO和资源服务器功能在版本1.3中移动到Spring Boot。您可以在Spring Boot用户指南中找到文档 。 该项目提供从CloudFoundry服务凭据到Spring Boot功能的自动绑定。如果您有一个称为“sso”的CloudFoundry服务,例如,使用包含“client_id”,“client_secret”和“auth_domain”的凭据,它将自动绑

  • 地址URL https://api.es.xiaojukeji.com/river/Login/getLoginEncryptStr 返回数据格式 JSON 请求方式 GET 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes

  • 接口说明: 接口类型:主动调用接口。 接口作用:可通过调用该接口来获取一个临时的URL,通过访问该URL即可直接进入某账号的智齿客服后台,从而实现单点登录的业务。 请求方式: POST 请求地址: https(http)://www.sobot.com/api/oss/5/direct_url 注:使用https请求返回的登录链接是https协议的,使用http请求,返回的登录链接就是http协

  • 问题内容: 我想使用Django为我们当前使用的多个应用程序实现单一登录(SSO)。如何使用Django实现SSO?是否有可用于实施SSO的Django软件包? 请帮忙谢谢 问题答案: 我们正在使用OpenAM。 http://forgerock.com/openam.html OpenAM Cookie表示用户已通过身份验证。 为此的身份验证后端非常简单。少于50行代码。 https://doc

  • 如何在iOS8中使用CloudKit实现Sign sign-on? 我知道你可以得到一个代表你的登录用户的字符串,这是你的应用程序唯一的,但是我如何在我的后端验证那个字符串呢? 我明白Apple ID/iCloud电子邮件地址是出于隐私原因而隐藏的。 我的后端是Azure中的ASP.NET Web API2,但如果更简单的话,我可以用另一种技术实现它。 我正在寻找相当于谷歌在Android上的单点