我从一篇不错的博客文章中了解了 SSO 原理的基本知识,请访问https://auth0.com/blog/what-is-and-how-does-single-sign-on-work/#
我认为要实现 SSO,我们使用一个中心域(例如 LDAP 或其他身份验证服务器)进行身份验证,它可以生成令牌并存储为 cookie 或仅存储在浏览器的存储中。
下次我们访问另一个域中的应用程序时,它会重定向到 Auth Server 并可以使用我们之前存储的令牌,然后我们可以获得一个新的 cookie,其中包含我们要访问的域的令牌。
通过这种方式,我认为 SSO 是使用一个中央 Auth Server 作为第三个托管服务器,或者我们可以称它为委托服务器,为不同的域生成不同的 cookie,这样我们就解决了 Single Origin Policy(cookie 只能是由其创建者访问,不能跨域)。
如果这就是 SSO 的工作方式,那么我对 IBM LTPA 感到困惑。我正在使用 WAS,并且从指南中,如果我想实现 SSO,我需要从第一台服务器获取一个 LTPA 密钥,并将其复制到我想要创建 SSO 功能的每台服务器。LTPA 密钥包括一个公钥和一个私钥,用于解密由 WAS 生成的 LTPA 令牌。
因此,如果我使用 LDAP 作为身份验证服务器,首先我在域 1 上访问我的应用程序,我的请求将被重定向到登录页面并在 LDAP 中进行身份验证后(这里我认为 LDAP 不会生成令牌),WAS 将生成一个带有 LTPA 令牌的 cookie,但是当我们想要访问域 2 中的应用程序时(该域中的 WAS 已经获得了 LTPA 密钥),我们的 LTPA 令牌可以被解密并且我们得到了我们的 userId(或者某些字段可以识别用户),然后我们再次去我们的 LDAP Auth 服务器验证这个 userId...
我不知道我的理解是否正确,但我认为这不能称为“SSO”。因为,首先,我们得到的token是WAS生成的,而不是LDAP,所以我们得到的只是一个userId,当我们解密这个token时,我们需要在LDAP中再次验证这个用户。其次,我们用来使 SSO 工作的方法是提供一个带有 LTPA 令牌的 cookie,但是 cookie 不能跨域发送......所以如果域 1 和域 2 不是同一个 Realm,这不可能发生......因为我们无法获取域 2 中的 cookie...
我几乎要疯了...
谁能告诉我 LTPA 如何通过使用 LTPA 密钥准确地作为 SSO 机制工作......
太感谢了!