使用ASP.NET 4.5+将SAML 2.0实现为服务提供者

时间:2018-03-14 20:32:33

标签: asp.net saml-2.0 okta

我很难从各种来源获得有关如何修改现有ASP.NET应用程序的明确指导(非MVC,如果重要的话 - 基于表单的身份验证的旧Web表单),以通过SAML接受单点登录用户。具体来说,我们希望连接到Okta。我已经让OpenID Connect与Okta合作,但我们的客户特别希望通过Okta获得SAML。我们还希望将来通过SAML支持其他身份提供商。

我已经在Okta中设置了应用程序并获得了我的x509证书和元数据,但我很难从那里开始。我已经阅读了很多相互矛盾的信息 - 有些消息称SAML2内置于.Net 4.5及更高版本,但有些人说它不支持SAML2协议,而且我没有发现它没有很好的例子Azure和ADFS。我看过this repo,但显然它不支持SHA256,这是我从Okta那里得到的。该库的文档也非常缺乏。我的大多数互联网搜索似乎都发现了如何通过.Net上的SAML实现SSO的过时或冲突的信息。

Okta自己的文档主要关注OIDC或他们自己的API,将SAML实现留给集成商。

有人可以向我指出一些使用SAML2的ASP.Net SSO的当前示例吗?优选地,web形成app而不是MVC。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

在一天结束时,您所要做的就是在应用中提供新的SAML端点并处理进出的内容。它只是检测用户是否在您的应用程序中有会话。如果没有,请使用SAMLRequest将它们重定向到其IdP,并等待浏览器使用SAMLResponse返回到ACS(属性使用者服务)端点。如果SAMLResponse中的属性足够,请将用户登录到您的应用程序中。

SAML对登录,会话或类似应用程序的内容一无所知。它只是一个用于管理登录等的XML包。

使用用户名/密码登录的常用方法如下:

https://yourapp.com/login

所以SAML可能是:

https://yourapp.com/sso

支持多个身份提供者,添加一个entityID参数:

https://yourapp.com/sso?entityID=https://some.idp.com/shibboleth

您从其元数据加载IdP的登录页面URL,您使用entityID参数加载该元数据。将浏览器发送到该URL以启动SAML过程。

所以这个过程或多或少:

  1. 用户访问你/ sso?entityID = blah endpoint
  2. 加载entityID的SAML元数据并获取SSO URL
  3. 使用表格
  4. 编码的SAMLRequest将浏览器重定向到SSO网址
  5. 使用IdP
  6. 编码的SAMLResponse接收ACS端点上的浏览器
  7. 解析SAMLResponse以获取SAML属性并检查它们的适用性
  8. 中记录用户

    您需要为您打算使用的每个IdP提供SAML元数据,并且当您充当SP(服务提供商)时,他们将需要您的应用的SAML元数据。