WebServices、WCS、WFS、WMS(Geoserver)等的单点登录

4
我正在尝试为一个Web应用程序实现单点登录(SSO)。也许你可以帮我找到一个合适的解决方案,给我指明方向或告诉我已经存在的解决方案。
场景:一个GeoExt(基于地理数据/地图的应用程序的ExtJS)Web应用程序(仅JavaScript)将部署在客户的Web服务器上。
客户将定义“用例”或“配置文件”:一组服务,如Web服务、GeoServer WFS、WCS、Google Maps等。这些服务可能需要额外的身份验证,如凭据或密钥。
用户(必须注册并申请“配置文件”)可以(一旦获得应用程序)检索访问与其配置文件相关联的服务所需的凭据。就像在普通的SSO解决方案中一样,用户不需要为自己输入每个凭据/密钥以使用服务。
主要问题:我无法修改第三方服务(例如Google)以添加SSO机制。
我希望有一个解决方案,允许用户登录一次即可访问所需的所有服务。我的第一个想法是一个存储所有所需凭据或密钥的存储库。用户登录后,可以检索所有所需信息来访问其他服务。是否有人知道现有的实现、论文、可能是这种服务的实现?
其他要求:JS应用程序与存储库之间的通信必须是安全的。凭据必须以安全的方式存储。但JS应用程序必须能够使用它们来访问服务(没有机会在JS应用程序中安全地存储解密密钥,对吧? *g)。
[编辑] 代理不是一个选择,因为涉及到的服务使用条款。

不清楚:每个用户是否都会拥有自己的帐户与每个 Web 服务,还是这是您将提供的一些东西?另外,当您说“通用 Web 服务”时,您真的意味着您想要一个可扩展的机制吗?据我所知,没有通用的 Web 服务这种东西。 - Jennifer Zouak
我编辑了问题。希望这次表达更清楚了。=) - lajuette
4个回答

1

访问Web服务是否必须在用户上下文中进行,还是通用的Web服务?

如果不是,您可以在Web服务器上处理与第三方Web服务的身份验证和通信,并将消息从服务器路由到客户端。这样,您可以仅使用第三方提供商的服务帐户,而无需跟踪和存储用户帐户和密码。


这些服务是通用的网络服务,不受我的控制。有些服务可能禁止代理(或“路由”)请求。 - lajuette

0

谷歌已经有了几种SSO机制 - 它支持SAML作为服务提供商(在某些情况下)和OpenID作为身份提供者(IDP)。您没有提到需要集成哪些其他第三方服务,但如果它们与其中任何一个兼容,则可以:

  1. 设置SAML IDP并使用它来SSO到谷歌和其他应用程序
  2. 将Google用作您的OpenID IDP(就像本网站一样),并使用它来SSO到其他应用程序

我知道像SAML、OpenID或其他类似OpenSSO的机制。就我所看到的,它们对我的情况没有帮助。我想要集成的服务大多是商业Web功能服务或需要身份验证但不兼容任何SSO工具箱的Web服务。它们通常只提供基本的HTTP(S)身份验证。其中一些服务是内部开发的,可以进行改装,但并非所有服务都可以。正如我所说: 在大多数情况下,无法修改这些服务。 - lajuette

0

我认为你应该对每个需要实现的Web服务进行包装/代理。这听起来可能是很多工作,但你可能能够找到共同的主题。

细节: 从你的Web服务器提供一个WS,它接受用户的配置文件标识,然后使用正确的凭据(从服务器端存储中检索)实际调用真正的Web服务。因此,在客户端不需要公开凭据。客户端JavaScript只需要调用你的服务器。你可以通过包装其他服务来实现你的SSO API。

注意:仔细检查每个Web服务的“合理使用”许可证。其中一些将检测到来自单个IP的高数量调用作为违反其服务协议,然后阻止或黑名单你的服务器。


正如我之前所说:“某些服务可能禁止代理(或“路由”)请求。” 我无法包装这些服务,因为每个客户端将使用不同的服务和自己的凭据。我可以编写一个可扩展的接口,为每个服务提供适配器,但这也不是一个选项。我们正在谈论那些不是IT专家的客户。 - lajuette

0

我们曾经做过类似的事情,使用Drupal作为框架。http://www.drupal.org

您可以使用Drupal内置的身份验证,也可以使用SSO解决方案,例如Shibboleth以及其模块http://drupal.org/project/shib_auth或OpenID,后者可用作核心模块。

一旦到达那里,您的世界将通过许多方法打开以消费服务,如drupal_http_request或http://drupal.org/project/rest_client Rest客户端模块,或WSRP http://drupal.org/project/wsrp,甚至颤抖,因为一些开发人员让我们通过Iframe消费他们的服务。最好的部分是已经创建了许多模块来消费现有的服务,例如Gmaps http://drupal.org/project/gmap和Amazon http://drupal.org/project/amazon等。

希望这对您有所帮助,如果需要进一步解释,我很乐意提供帮助,因为我们可以用许多不同的方式消费服务。干杯。


我无法封装将要使用的服务,也无法修改它们,也不知道客户想要使用哪些服务。 - lajuette

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接