【问题标题】:Implement SAML 2.0 as a service provider with ASP.NET 4.5+使用 ASP.NET 4.5+ 将 SAML 2.0 实现为服务提供者
【发布时间】:2018-03-14 20:32:32
【问题描述】:

我很难从各种来源获得关于如何修改我现有的 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 表单应用程序而不是 MVC。

提前谢谢你。

【问题讨论】:

    标签: asp.net saml-2.0 okta


    【解决方案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 端点
    2. 为 entityID 加载 SAML 元数据并获取 SSO URL
    3. 使用表单编码的 SAMLRequest 将浏览器重定向到 SSO URL
    4. 使用来自 IdP 的编码 SAMLResponse 在 ACS 端点上接收浏览器
    5. 解析 SAMLResponse 以获取 SAML 属性并检查它们的适用性
    6. 让用户登录

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

    【讨论】:

    • 是的,我应该提到我熟悉这个过程。我的问题更具体地是关于 Asp.Net 中的实现细节。您是否有可以推荐的库,或者 Asp.Net 中的一些综合示例?我遇到的大部分内容都没有很好的文档记录(比如我链接到的库),或者已经过时/不推荐使用。
    猜你喜欢
    • 2020-10-26
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多