Keycloak通过Rest API设置密码策略

4
我想通过Keycloak RestAPI更新/添加密码策略。
我已经阅读了文档,但似乎只能通过API检索密码策略列表。是否有其他可能的方法,以便我可以通过Rest API处理密码策略? https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_serverinforepresentation
https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_passwordpolicytyperepresentation

Manage Password Policy through Keycloak Admin Panel

我正在使用Keycloak 11。


更新:我成功地找到了密码策略值所在的领域表下的密码策略列。我认为,一旦我更新表格,我可能需要重新启动Keycloak,或者使用Keycloak Rest API(POST /{realm}/clear-realm-cache)清除Keycloak缓存https://www.keycloak.org/docs-api/11.0/rest-api/index.html,以使其生效。

enter image description here

1个回答

7

更新:Keycloak 17 Quarkus distribution已删除/auth路径。因此,您可能需要从本答案中提供的端点调用中删除/auth


您可以使用Keycloak Rest API来获取领域密码策略,即:
GET <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>

从JSON响应中提取字段passwordPolicy。对于以下策略:

enter image description here

你会得到以下响应:长度为8,哈希迭代27500次 要添加/更新给定策略,请调用端点。
PUT <KEYCLOAK_HOST>/auth/admin/realms/<YOUR_REALM>

使用适当的数据参数。例如,假设您想将“最小长度”策略从8更新为10,则应在PUT请求中发送以下数据:

'{"passwordPolicy":"length(10) and hashIterations(27500)"}'

对于那些感兴趣的人,我在这个git repo 中提供了上述操作的脚本。


步骤

您可以使用Keycloak管理REST API获取该信息;为了调用该API,您需要一个具有适当权限的用户的访问令牌。现在,我将使用master领域中的admin用户,但稍后我将解释如何使用其他用户:

curl "https://${KEYCLOAK_HOST}/auth/realms/master/protocol/openid-connect/token" \
    -d "client_id=admin-cli" \
    -d "username=${ADMIN_NAME}" \
    -d "password=${ADMIN_PASSWORD}" \
    -d "grant_type=password"

从管理员的JSON响应中提取属性 access_token 的值。让我们将其保存在变量 $ACCESS_TOKEN 中以供以后参考。
获取$REALM_NAME的域信息
curl -X GET "https://${KEYCLOAK_HOST}/auth/admin/realms/${REALM_NAME}" \
     -H "Content-Type: application/json" \
     -H "Authorization: bearer ${ACCESS_TOKEN}"

JSON响应中提取字段passwordPolicy
设置$REALM_NAME的密码策略:
curl -X PUT "https://$KEYCLOAK_IP/auth/admin/realms/${REALM_NAME}"\
     -H "Content-Type: application/json" \
     -H "Authorization: bearer ${ACCESS_TOKEN}" \
     -d "${JSON_PASSWORD_POLICY_DATA}"

分配适当的用户权限

对于那些不想从主管理员用户获取访问令牌的人,可以从其他用户获取,但该用户需要来自realm-management客户端的view-realm权限。为此,您可以执行以下操作:

(旧版Keycloak UI)

  • 转到“用户”,然后选择相关用户
  • 转到选项卡Role Mappings
  • client roles中选择realm-management
  • 选择角色view-realm,然后单击Add selected

(新版Keycloak UI)

  • 转到“用户”,然后选择相关用户
  • 转到选项卡Role Mappings
  • 单击Assign role
  • Search by role name中输入view-realm
  • 选择角色并分配

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接