[#问题已编辑以澄清#]
我正在尝试为Web应用程序实现单点登录(SSO)。也许你可以帮助我找到一个合适的解决方案,给我一个方向或告诉我,解决方案已经存在。
场景:GeoExt(基于地理数据/地图的应用程序的ExtJS)webapp(仅限JavaScript)将部署在客户的网络服务器上。
客户将定义“usecases”或“profiles”:一组服务,如webservices,GeoServer WFS,WCS,Google Maps等。这些服务可能需要额外的身份验证,如凭据或密钥。
用户(必须注册并申请“个人资料”)可以(一旦授予申请)检索访问与其个人资料相关联的服务所需的凭证。与普通的SSO解决方案一样,用户无需为自己输入每个凭证/密钥即可使用这些服务。
[#此处没有变化......#]
主要问题:我无法修改第三方服务(例如Google)以添加SSO机制。
我想要一个允许用户登录一次的解决方案,以便能够访问所需的所有服务。我的第一个想法是存储所有必需的凭据或密钥的存储库。用户登录并可以检索所有必需的信息以访问其他服务。有没有人知道现有的实施,论文,也许这些服务的实施?
其他要求:JS应用程序和存储库之间的通信必须是安全的。凭证必须以安全的方式存储。但JS应用程序必须能够使用它们来访问服务(没有机会安全地在JS-app中存储解密密钥,嗯?* g)。
[编辑] 由于涉及的服务的使用条款,代理不是一种选择。
答案 0 :(得分:1)
对Web服务的访问是否必须在用户上下文中,还是通用Web服务?
如果没有,您可以在Web服务器上处理与第三方Web服务的身份验证和通信,并将消息从您的服务器路由到您的客户端。这样,您只需使用第三方提供商的服务帐户,而无需跟踪和存储用户帐户。密码。
答案 1 :(得分:0)
Google已经有一些SSO机制 - 它支持SAML acting as a Service Provider(SP)(在某些情况下)和OpenID when acting as an Identity Provider(IDP)。您没有提到需要与哪些其他第三方服务集成,但如果它们与这两种服务兼容,您可以:
答案 2 :(得分:0)
我认为你应该包装/代理每个需要实现的Web服务。对于每项服务而言,这可能听起来很多,但您可以找到共同的主题。
详细说明: 从您的Web服务器提供一个WS,该WS获取用户的配置文件标识,然后使用正确的凭据实际调用真实的Web服务(从服务器端存储重新获得)。因此,不需要在客户端中向用户提供凭证。客户端javascript只需要调用您的服务器。您可以通过包装其他服务来实现您的SSO API。
警告:仔细检查每个Web服务的“合理使用”许可证。他们中的一些人会发现来自单个IP的大量呼叫违反了他们的服务协议,然后阻止或黑名单你的服务器。
答案 3 :(得分:0)
我们已经做了类似的事情,使用Drupal作为框架。 http://www.drupal.org
您可以使用Drupal的内置身份验证,或者使用诸如Shibboleth之类的SSO解决方案以及http://drupal.org/project/shib_auth处的模块或可用作核心模块的OpenID。
在那里,你的世界开始通过许多方法开始消费服务,drupal_http_request或http://drupal.org/project/rest_client一个Rest客户端模块,或者WSRP http://drupal.org/project/wsrp甚至是 shudder ,正如一些开发人员所做的那样我们通过Iframe消费他们的服务。最好的部分是已经创建了很多模块来使用现有服务,例如Gmaps http://drupal.org/project/gmap和亚马逊http://drupal.org/project/amazon等。
希望这是helfpul,我很乐意进一步阐述,因为我们以许多不同的方式消费服务。欢呼声。