keycloak-传递参数满足密码策略要求

Keycloak- passed parameter to meet password policy requirements

我在我的 Symfony 项目中定义了 get Keycloak 方法。

我在提取密码策略列表的数组中得到了异常结果。目前仅设置 'not username' 规则:

我无法在文档中的 keycloak 中找到任何其他端点,我可以将我的密码字符串作为参数传递并查看它是否满足 password policies 中定义的要求。

我将提供 GET 返回我刚才描述的内容的函数。我认为如果可以对其进行修改以提供密码字符串,它将完成工作。

public function validateKeycloakPassword()
{
    $options = [
        'headers' => $this->getAuthJsonHeaders()

    ];

    try {
        $endpoint = sprintf('auth/admin/realms/%s/', $this->realm);
        return $this->request('GET', $endpoint, $options);
    } catch (\Exception $e) {
        $this->exception('Can`t get password policy information on Keycloak. ' . $e->getMessage());
    }
}

在我的控制器中,端点:

 /**
 * @Route("/check", name="check")
 */
public function validatePassword()
{

    $violations = $this->service->validateKeycloakPassword();
    return $violations['passwordPolicy'];
}

求和:

keycloak 中是否有任何端点,我可以在其中传递我的密码变量并检查它是否满足 password policies 中定义的要求可能使用 PUT 方法。

据我所知没有这样的端点。不过,您可以使用一种解决方法,创建一个 dummy_user 用于测试密码。从该用户获取 ID,您可以从 Keycloak 管理控制台或使用端点获取:

curl -X GET  <KEYCLOAK_HOST>/auth/admin/realms/<REALM_NAME>/users/?username=dummy_user

JSON 响应中提取用户 ID。然后调用以下端点:

PUT <KEYCLOAK_HOST>/auth/admin/realms/<REALM_NAME>/users/<USER_ID>/reset-password

使用请求负载:

{"type":"password","value":"<THE_PASSWORD_THAT_YOU_WANT_TO_TEST>","temporary":false}

如果密码无效,您将收到 400,您可以通过响应查看错误。此类响应的示例:

error:"invalidPasswordMinLengthMessage"
error_description:"Invalid password minimum length 8"

显然,这不适用于 username 政策,但可以轻松地在您的应用中签入该政策(例如, password != username