我有使用 Keycloak 3.1.x 的应用程序,该应用程序使用以下依赖项与 Keycloak 远程交互:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>3.4.1.Final</version>
</dependency>
应用程序使用 Spring Boot,在控制器中我们获得两个参数:
现在在后端我们必须验证旧密码是否与 Keycloak 中存储的密码匹配,然后最终应用新密码。
我知道有一个端点
/auth/admin/{realm}/account
允许用户更改密码,但我需要在后端使用该功能。
该依赖项在底层使用 RestClient,从我在 https://issues.jboss.org/browse/KEYCLOAK-943 中发现的内容来看,Keycloak 不为
account
控制台提供 REST API。
有人知道是否可以通过 Keycloak Admin API 验证旧密码吗?
编辑:
也许有一种方法可以获取用户的旧密码并尝试获取新令牌?如果失败,则表明旧密码错误。
没有api方法,但您可以通过在realms/{realm}/protocol/openid-connect/token上获取令牌请求来验证密码
<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();
如果密码不正确,这将返回未经授权的异常。