4

[#为澄清而编辑的问题#]

我正在尝试为 Web 应用程序实现单点登录 (SSO)。也许你可以帮我找到一个合适的解决方案,给我一个方向或告诉我,解决方案已经存在。

场景:GeoExt(基于地理数据/地图的应用程序的 ExtJS)web 应用程序(仅限 JavaScript)将部署在客户的网络服务器上。

客户将定义“用例”或“配置文件”:一组服务,如 web 服务、GeoServer WFS、WCS、谷歌地图等。这些服务可能需要额外的身份验证,如凭据或密钥。

用户(必须注册并申请“个人资料”)可以(一旦申请被授予)检索访问与其个人资料相关联的服务所需的凭据。就像在普通的 SSO 解决方案中一样,用户不需要为自己输入每个凭据/密钥来使用服务。

[ # 从这里开始没有变化... #]

主要问题:我无法修改第 3 方服务(例如 Google)以添加 SSO 机制。

我想要一个解决方案,允许用户登录一次以访问所有所需的服务。我的第一个想法是存储所有必需的凭据或密钥的存储库。用户登录并可以检索访问其他服务所需的所有信息。有谁知道现有的实现、论文,也许是此类服务的实现?

其他要求: JS 应用程序和存储库之间的通信必须是安全的。凭据必须以安全的方式存储。但是 JS 应用程序必须能够使用它们来访问服务(没有机会将解密密钥安全地存储在 JS 应用程序中,嗯?*g)。

[编辑] 代理不是一种选择,因为所涉及的服务的使用条款。

4

4 回答 4

1

对 Web 服务的访问必须在用户上下文中还是它们是通用 Web 服务?

如果没有,您可以在您的 Web 服务器上处理与 3rd 方 Web 服务的身份验证和通信,并将消息从您的服务器路由到您的客户端。通过这种方式,您可以简单地使用第三方提供商的服务帐户,而不必跟踪和存储用户帐户和密码。

于 2010-03-18T22:30:28.877 回答
0

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

  1. 设置 SAML IDP 并将其用于 SSO 到 Google 和您的其他应用程序
  2. 使用 Google 作为您的 OpenID IDP(就像本网站一样),并使用它来 SSO 到其他应用程序
于 2010-03-12T00:58:12.673 回答
0

我认为您应该包装/代理每个需要实现的 Web 服务。对于每个服务来说,这听起来可能需要做很多工作,但您也许可以找到共同的主题。

详细信息:从您的 Web 服务器提供一个 WS,它获取用户的配置文件身份,然后使用正确的凭据(从服务器端存储检索)实际调用真实的 Web 服务。因此,客户端中的用户无需提供任何凭据。客户端javascript只需要调用你的服务器。您可以通过包装其他服务来实现您的 SSO API。

注意:仔细检查每个 Web 服务的“合理使用”许可证。他们中的一些人会检测到来自单个 IP 的大量呼叫违反了他们的服务协议,然后阻止或将您的服务器列入黑名单。

于 2010-03-19T20:35:22.910 回答
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等。

希望这是有帮助的,我很乐意进一步详细说明,因为我们以许多不同的方式使用服务。干杯。

于 2010-03-20T08:54:43.713 回答