php - Keycloak-传递参数以满足密码策略要求
问题描述
我在 Symfony 项目中定义了 get Keycloak 方法。
在提取密码策略列表的数组问题上,我得到了例外结果。目前它只设置了“非用户名”规则:
我在文档中的 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
)
推荐阅读
- attributes - [IAR]如何打印一段结束地址的开头?
- asp.net-mvc - Umbraco 路由或模型绑定
- php - 以编程方式创建 Woocommerce 订单并应用付款方式
- python - 如何使python将输入作为浮点数读取?
- c - 当动态分配的二维数组接收输入时,为什么这个程序会崩溃?
- mysql - 如何将 MySQL 查询结果转换为 JSON 对象
- algorithm - 在无向图中查找所有桥边?(代码不起作用)
- mysql - MySql 从当前日期选择 1 周和 1 个月提前日期
- javascript - 一个记事本,即使在刷新后也能保留笔记
- json - 在 typeorm 中查询 JSON 字段