Keycloak 钥匙斗篷-使用master为不同领域内省令牌

Keycloak 钥匙斗篷-使用master为不同领域内省令牌,keycloak,kong,Keycloak,Kong,我们正在构建一个应用程序,其中多个客户端可以注册并拥有自己的用户群。例如,客户机“CompanyA”可以注册,然后允许其用户使用自己的用户名(有些来自LDAP)访问我们的系统。“CompanyB”也可以这样做,用户名对于一个客户端是唯一的,但是可以跨客户端复制 我们正在使用KeyClove来实现这一点,并使用领域的概念来实现这一点。当一个新的客户机注册时,我们为他们创建一个新的领域,并进行必要的配置。这正如预期的那样工作,但是我们的中间件有问题 我们的中间件是Kong,它有一个OIDC插件,我们

我们正在构建一个应用程序,其中多个客户端可以注册并拥有自己的用户群。例如,客户机“CompanyA”可以注册,然后允许其用户使用自己的用户名(有些来自LDAP)访问我们的系统。“CompanyB”也可以这样做,用户名对于一个客户端是唯一的,但是可以跨客户端复制

我们正在使用KeyClove来实现这一点,并使用领域的概念来实现这一点。当一个新的客户机注册时,我们为他们创建一个新的领域,并进行必要的配置。这正如预期的那样工作,但是我们的中间件有问题

我们的中间件是Kong,它有一个OIDC插件,我们将其与KeyClope集成,但是该插件需要域名,在我们的例子中,域名实际上是动态的

例如: 当用户从我们的UI登录时,他会从他们的客户端领域收到一个令牌。现在,当用户从我们的后端请求资源时,该请求将通过香港

Kong将使用其配置的客户端和域来内省此令牌,但是无法动态选择此令牌,因此理想情况下,我希望在主域上为每个客户端域配置一个配置的客户端,并使用此魔法客户端来内省其令牌


这样的事情可能吗?如果没有,我可以查看哪些其他途径?

您可以检查访问令牌,查看它是从哪个领域创建的

如果您使用类似的内容解码JWT令牌,您将在令牌上看到一个名为issuer的属性。这是创建令牌的领域的url

因此,要获得领域,您可以执行以下操作:

import org.keycloak.TokenVerifier;
import org.keycloak.representations.AccessToken;
...

    AccessToken token = (AccessToken)TokenVerifier.create(tokenString, 
    AccessToken.class).parse().getToken();
    String realm = token.getIssuer().substring(token.getIssuer().lastIndexOf(47) + 1);

我应该把代码放在哪里?钥匙斗篷或其他东西的内部?无论你在哪里需要从令牌获得领域。我们在春季服务中使用它。听起来您可能需要它来代替Kong将领域传递给Kong插件。