我们目前正在我们的组织内实施 SSO,已决定使用 OpenId Connect 作为我们的身份验证协议(特别是使用 Gluu)。
我们遇到的问题是将我们可以证明已经过身份验证的身份传递给后端服务链。我见过人们传递 id_token,但据我了解,这实际上不是 id_token 的意图,而是仅用于初始客户端使用。
假设我们有一个 Angular 应用程序调用相关的 REST 服务,他们称之为某种数据服务。目前,Angular 应用程序会将未经身份验证的用户重定向到 Gluu 进行登录,并提供 id_token 和 access_token。
Gluu 的实现是提供一个不透明的 access_token。因此,当我们将该令牌从 Angular 应用程序传递到 REST 服务时,我们返回到 Gluu 以验证该令牌,提取与其关联的用户信息(基于与 OpenId 一起使用的范围)和客户端信息。这一切都适用于第一跳。
从 REST 服务连接到数据服务时会出现问题。使用 client_credential 流,REST 服务调用具有数据服务范围的 Gluu 以获取新的访问令牌。但是,我发现无法将原始令牌交换为保留原始用户声明的新令牌。
我看到有人说,“你在一个受信任的域中,所以只需传递用户 ID 并相信他们已经过身份验证。” 这对我们不起作用。我们之前使用的是 HMAC 方案,团队在传递从未经过身份验证的用户 ID,在他们不知情的情况下冒充用户,这就是为什么我们需要一种方法来确保用户已通过身份验证。
我觉得我在这里错过了一块拼图。这样做的“正确”方法是什么?