我想在两个网络应用之间执行SSO。这是我的情景:
应用程序A& B(都提供RESTFUL API)。 应用B使用基于表单的身份验证,我无法对应用B进行任何修改。此外,应用A和应用B维护不同的用户存储以进行身份验证。
用户在App A中注册,成功注册后,它会登录到应用A并从应用B调用需要用户身份验证的API。
目标是确保用户登录应用A后,他们应该能够调用应用B的经过身份验证的API,而无需再次登录应用B.
我经历了PingIdentity,Stormpath和其他几家供应商提供的基于云的SSO解决方案,看起来跨多个应用程序的SSO要求所有应用程序都应该信任相同的身份提供商,或者应用程序应该了解SAML / Open ID。此外,它还需要我更改应用B处理身份验证的方式(但我无法对应用B进行任何更改。
我想到了我的方案的简单解决方案(在某种程度上也是一种SSO方法http://www.opengroup.org/security/sso/sso_intro.htm)
用户登录App A后,服务器将对App B进行后台登录呼叫(使用App B的预配置默认凭据)。响应此登录,应用B将发出会话cookie,该cookie将在后续API调用中传递给App B. 这种方法存在使用应用B的默认凭据的缺点,但它很简单并且可以使用。
然而,在走这条路之前,我想知道是否可以使用标准SSO解决方案以不同方式处理这种情况?
答案 0 :(得分:3)
传统上,有一些"胶水"将SSO应用程序绑定在一起。两个应用程序之间需要有内在的信任。这通常使用协议(SAML / Open IDC)或共享机密(用于验证签名)来完成。
在您描述的场景中,如果您无法控制或访问App B的身份验证方式,您将始终需要在后台进行身份验证"到App B并保留其会话cookie以用于后续请求。
然而,这本质上是不安全的。它有效地为App B的所有用户创建了一个匿名登录App B.就App B而言,它始终是登录的用户。
如果您有能力在App B中创建一个帐户,那么对于App A中的每个帐户,您在App B中都有一个类似的帐户,您登录后会更安全。
希望这有帮助!
完全披露:我为Stormpath工作。