wso2 身份服务器中每个租户的 SSO

SSO per tenant in wso2 Identity Server

我们希望应用程序使用 SAML 登录 Identity Server。应用程序将分为两个域。一个域中的应用程序共享 sso,但另一个域中的应用程序不共享。示例:

当app1登录IS时,app2也会自动通过IS登录。但是 app3 和 app4 要求 user/password 针对相同的 IS。

我们用IS里的租户试了一下,但是好像app1登陆的时候app3和app4也登陆了。

有办法吗?

谢谢。

WSO2IS SSO 会话 cookie (commonauthid) 似乎不是基于租户域。它仅对服务器是唯一的。这一定是上述行为的原因。有人可以将此视为错误。有人不会。因为,SP 决定不允许其他租户的用户登录。已经通过 WSO2IS 服务器和 SP 验证的用户必须决定是否允许登录。

但是,当您在 WSO2IS 中将 SP 配置为 SAAS 应用程序时,可以看到此行为。如果您未配置为 SAAS 应用程序,则无法登录不同的租户。因为用户的租户域和SP的租户域是不同的。因此用户不能登录。您必须看到错误 Service Provider tenant domian must be equal to user tenant domain for non-SaaS applications"。如果您没有配置为 SAAS 应用程序,用户仍然可以登录不同的租户,这可能是 WSO2IS 中的一个错误。

但是,以下是在 SP 端正确执行此操作的一些示例方法。

比如说,有两个应用域 FOO 和 BAR

foo.com 租户包含来自 FOO 的 SP。 bar.com 租户包含来自 BAR 的 SP。

foo.com 租户包含可以从 FOO 访问 SP 的用户。 bar.com 租户包含可以从 BAR 访问 SP 的用户。

比如说,来自 foo.com 的用户 "bob" 访问 FOO 应用程序并且 bob 可以登录 单点登录。然后 SSO cookie 将被设置到 "bob" 浏览器中。 SAML 从 WSO2IS 收到的断言包含用户名 "bob@foo.com"。 FOO 应用程序可以接受请求,因为用户来自 foo.com 域。

此外,如果 bob 尝试使用相同的浏览器访问 BAR 应用程序...登录 页面将不会显示,因为 SSO cookie 在那里,WSO2IS 识别 经过身份验证的用户为 "bob@foo.com" 然后 SAML2 响应将发送到 BAR,SAML 断言中的用户名将为 "bob@foo.com" 然后 BAR 应用程序可以拒绝该用户,因为该用户来自 "foo.com" 因此用户无法登录到 BAR 应用程序。

因此 SP 拥有允许用户登录的控制权。