如何使用 Keycloak Admin Java API 验证旧密码?

问题描述 投票:0回答:2

我有使用 Keycloak 3.1.x 的应用程序,该应用程序使用以下依赖项与 Keycloak 远程交互:

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-admin-client</artifactId>
    <version>3.4.1.Final</version>
</dependency>

应用程序使用 Spring Boot,在控制器中我们获得两个参数:

  1. 旧密码
  2. 新密码

现在在后端我们必须验证旧密码是否与 Keycloak 中存储的密码匹配,然后最终应用新密码。

我知道有一个端点

/auth/admin/{realm}/account
允许用户更改密码,但我需要在后端使用该功能。

该依赖项在底层使用 RestClient,从我在 https://issues.jboss.org/browse/KEYCLOAK-943 中发现的内容来看,Keycloak 不为

account
控制台提供 REST API。

有人知道是否可以通过 Keycloak Admin API 验证旧密码吗?

编辑:

也许有一种方法可以获取用户的旧密码并尝试获取新令牌?如果失败,则表明旧密码错误。

java spring security spring-boot keycloak
2个回答
0
投票

没有api方法,但您可以通过在realms/{realm}/protocol/openid-connect/token上获取令牌请求来验证密码


0
投票
    <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-authz-client</artifactId>
        </dependency>

您可以从这里使用这个:https://www.keycloak.org/docs/latest/authorization_services/

它指出你可以这样做

AuthzClient authzClient = AuthzClient.create();
AuthorizationRequest request = new AuthorizationRequest();
AuthorizationResponse response = authzClient.authorization("alice", "alice").authorize(request);
String rpt = response.getToken();
System.out.println("You got an RPT: " + rpt);

但对我来说,您可以使用凭据检查是否有访问令牌,而不是 AuthorizationRequest

     AccessTokenResponse response =  authzClient.obtainAccessToken(emailAddress, password);
  String responseToken = response.getToken();

如果密码不正确,这将返回未经授权的异常。

© www.soinside.com 2019 - 2024. All rights reserved.