首页 > 解决方案 > 通过 SAML 在 Perl 中验证登录名+密码

问题描述

是否有可能通过身份提供者 (IdP) 的 SAML 在 Perl 中验证登录名+密码?如果是:如何?

我知道这不是 SAML 的常用工作方式。

这样做的背景是我们的 Web 应用程序有 4 个不同的客户端,它们应该通过 SAML 启用中央密码,这些密码是用完全不同的技术实现的。

我们的产品经理认为 SAML 连接对于 4 个客户端来说过于复杂,因此应该在 Web 应用程序中集中进行身份验证。

客户端将登录名和密码传递给 Web 应用程序,就像没有 SSO 一样,并且 Web 应用程序应该集中验证访问数据。

标签: perlsaml

解决方案


问题 1:是否有可能通过身份提供者 (IdP) 的 SAML 在 Perl 中验证登录名+密码?如果是:如何?

回答:从网络安全的角度来看,
绝对不会

问题 2:我知道这不是 SAML 的常用工作方式。

回答
是的。你是对的。
(一)SAML规范定义了三个角色:用户、身份提供者(IdP)和服务提供者(SP)。在 SAML 解决的主要用例中,用户请求访问服务或从服务提供商处登录 Web 应用程序。服务提供者向身份提供者请求并获得身份验证断言。在此断言的基础上,服务提供者可以为用户做出访问控制决策,即可以决定是否允许用户访问服务或登录Web应用程序。

(II) 在将基于主题的断言交付给 SP 之前,IdP 可能会向用户请求一些信息(例如用户名和密码),以便对用户进行身份验证。SAML 指定从 IdP 传递到 SP 的断言内容。

(II.a) 在 SAML 中,一个身份提供者可以向许多 SP 提供 SAML 断言。

(II.b) 同样,一个 SP 可能依赖并信任来自许多 IdP 的断言。如果您的产品经理决定请求您的 Web 应用程序的所有 4 个不同客户端开发自己的 SAML IdP,这将是您的 Web 应用程序的 SAML 场景。例如,一些社交网站允许其用户通过 Google、Facebook、LinkedIn 等第三方 IdP 通过 OAuth 2 协议或 OpenID Connect 协议/OAuth 2(而不是 SAML)提供的身份验证登录其 Web 帐户。

问题 3:背景是我们的 Web 应用程序有 4 个不同的客户端,它们应该通过 SAML 启用中央密码,这些密码是用完全不同的技术实现的。

回答
如果您的 Web 应用程序的 4 个不同客户端应该通过 SAML 启用中央密码,它们可以使用完全不同的技术或编程语言(例如 Java、PHP 或 Scala)实现自己的 SAML IdP。

(I) 例如,我们用 Java 开发了我们以前版本的零密码身份验证和授权系统,并利用基于Java的 Shibboleth IdP 为企业应用程序提供 SAML SSO。

我们在Scala中开发了具有可扩展性和高可用性的当前版本的零密码身份验证和授权系统,以便在没有 Shibboleth IdP 的情况下为企业应用程序本地提供 SAML SSO。

(II) 无论您的 Web 应用程序的 4 个不同客户端使用哪种技术或编程语言来实现自己的 SAML IdP,他们的 SAML IdP 只需要使用中央密码数据存储/存储库(例如 OpenLDAP 或 MySQL)对其用户进行身份验证) 在本地,然后使用 SAML 断言/SAML 响应将用户信息传递给您的 Web 应用程序/SAML 服务提供商。您的 Web 应用程序/SAML 服务提供商只需要将 SAML 断言携带的用户信息映射到您的 Web 应用程序的本地用户信息。

问题 4:我们的产品经理认为 SAML 连接对于 4 个客户端来说过于复杂,因此应该在 Web 应用程序中集中进行身份验证。


如果用户身份验证需要集中在您的 Web 应用程序中而不是在 SAML IdP 中进行,那么从网络安全的角度来看,4 个不同的客户端不需要实现自己的 SAML IdP。
相反,您只需为所有 4 个不同的客户端创建并分配不同的子域,即您的 Web 应用程序的所有 4 个不同的客户端访问不同的子域,例如 client-org1.your-web-app.com、client -org2.your-web-app.com、client-org3.your-web-app.com、client-org4.your-web-app.com。

请注意,您的 Web 应用程序的不同子域显示相同的登录网页。示例 #1:client-org1.box.com、client-org2.box.com 如果您的客户也订阅 Box 帐户,或示例 #2:client-org1.my.salesforce.com、client-org2.my.salesforce。 com 如果您的客户也订阅了 Salesforce 帐户。

问题5:客户端将登录名和密码传递给Web应用程序,就像没有SSO一样,Web应用程序应该集中验证访问数据。


您的 Web 应用程序的不同子域显示相同的登录网页。您的 Web 应用程序的 4 个不同客户端访问您的 Web 应用程序的不同子域,4 个不同客户端的用户向您的 Web 应用程序提交登录名和密码(通过不同的子域 URL),就像没有 SSO 一样,并且数据存储/ Web 应用程序的存储库应该集中验证访问数据(即登录用户名/密码)。然后,您的 Web 应用程序的 4 个不同客户端不需要任何 SAML IdP。


推荐阅读