使用不同身份提供者的两个应用程序的 SSO
SSO for two applications that use different identity providers
我想在两个网络应用程序之间执行单点登录。这是我的场景:
应用程序 A 和 B(均提供 RESTFUL API)。 应用程序 B 使用基于表单的身份验证,我无法对应用程序 B 进行任何修改。此外,应用程序 A 和应用程序 B 维护不同的用户存储以进行身份验证。
用户在应用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)
一旦用户登录到应用程序 A,服务器将对应用程序 B 进行后台登录调用(使用应用程序 B 的预配置默认凭据)。作为对该登录的响应,应用程序 B 将发出一个会话 cookie,该 cookie 将在随后的 API 调用中传递给应用程序 B。
这种方法具有为应用程序 B 使用默认凭据的缺点,但它很简单并且可行。
但是,在走这条路之前,我想知道是否可以使用标准 SSO 解决方案以不同的方式处理这种情况?
传统上,有一些 "glue" 将 SSO 应用程序绑定在一起。两个应用程序之间需要有内在的信任。这通常通过协议 (SAML / Open IDC) 或共享机密(用于验证签名)来完成。
在您所描述的场景中,如果您无法控制或访问 App B 的身份验证方式,您将始终需要对 App B 进行身份验证 "in the background" 并保留其会话 cookie 以用于后续请求.
但是,这本质上是不安全的。它有效地为应用程序 A 的所有用户创建了应用程序 B 的匿名登录。就应用程序 B 而言,它将始终是同一用户登录。
如果您能够在应用程序 B 中创建一个帐户,这样对于应用程序 A 中的每个帐户,您在应用程序 B 中都有一个您登录的类似帐户,那会更安全。
希望对您有所帮助!
完全披露:我为 Stormpath 工作。
我想在两个网络应用程序之间执行单点登录。这是我的场景:
应用程序 A 和 B(均提供 RESTFUL API)。 应用程序 B 使用基于表单的身份验证,我无法对应用程序 B 进行任何修改。此外,应用程序 A 和应用程序 B 维护不同的用户存储以进行身份验证。
用户在应用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)
一旦用户登录到应用程序 A,服务器将对应用程序 B 进行后台登录调用(使用应用程序 B 的预配置默认凭据)。作为对该登录的响应,应用程序 B 将发出一个会话 cookie,该 cookie 将在随后的 API 调用中传递给应用程序 B。 这种方法具有为应用程序 B 使用默认凭据的缺点,但它很简单并且可行。
但是,在走这条路之前,我想知道是否可以使用标准 SSO 解决方案以不同的方式处理这种情况?
传统上,有一些 "glue" 将 SSO 应用程序绑定在一起。两个应用程序之间需要有内在的信任。这通常通过协议 (SAML / Open IDC) 或共享机密(用于验证签名)来完成。
在您所描述的场景中,如果您无法控制或访问 App B 的身份验证方式,您将始终需要对 App B 进行身份验证 "in the background" 并保留其会话 cookie 以用于后续请求.
但是,这本质上是不安全的。它有效地为应用程序 A 的所有用户创建了应用程序 B 的匿名登录。就应用程序 B 而言,它将始终是同一用户登录。
如果您能够在应用程序 B 中创建一个帐户,这样对于应用程序 A 中的每个帐户,您在应用程序 B 中都有一个您登录的类似帐户,那会更安全。
希望对您有所帮助!
完全披露:我为 Stormpath 工作。