如何将策略添加到Keycloak-UI崩溃

时间:2020-05-21 12:44:20

标签: keycloak keycloak-rest-api

当某些 admin客户端由某些 admin客户端能够创建用户并获取供其他客户端使用的访问令牌时,我正在尝试启用流。 / p>

我具有启用和配置了令牌交换细粒度身份验证的KeyCloak设置。我可以通过REST API登录我的管理员用户,然后交换令牌。但是当我指定观众时,我会出错。

此令牌返回令牌,但我需要另一位客户/受众群体的令牌。

http -f POST https://my-keycloak-server.com/auth/admin/realms/my-realm/protocol/openid-connect/token grant_type=urn:ietf:params:oauth:grant-type:token-exchange requested_subject=1a147915-53fe-454d-906a-186fecfa6974 client_id=api-admin client_secret=23a4ecbe-a9e8-448c-b36a-a45fa1082e6e subject_token=eyJhbGeiOiJSUzI1NiIs...... 

这是失败的错误。

http -f POST https://my-keycloak-server.com/auth/admin/realms/my-realm/protocol/openid-connect/token grant_type=urn:ietf:params:oauth:grant-type:token-exchange requested_subject=1a147915-53fe-454d-906a-186fecfa6974 client_id=api-admin client_secret=23a4ecbe-a9e8-448c-b36a-a45fa1082e6e subject_token=eyJhbGeiOiJSUzI1NiIs...... audience=my-another-client
{
    "error": "access_denied", 
    "error_description": "Client not allowed to exchange"
}

所以我尝试为目标受众客户端设置细粒度身份验证(在标签中启用了它,然后尝试为我的管理员用户添加策略以能够交换令牌),但是当我想添加允许我的管理员用户执行令牌交换的政策,但由于UI错误,我陷入了困境。

当输入策略名称时,Keycloak正在寻找名称大肠菌时,我得到404。在这种情况下,Afaik 404不应阻止表单发布,因为这不会造成名称冲突。相反,我立即因错误而被重定向。

https://my-keycloak-server.com/auth/admin/realms/my-realm/clients/1bafa9a4-f7e2-422c-9188-58ea95db32ef/authz/resource-server/policy/search?name=some-name

最后,我无法在Keycloak中添加任何策略。表单验证一直都以找不到404策略名称引起的崩溃而告终。

我正在使用dockerized keycloak 10.0.0

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我是通过实时编辑Angular JS UI脚本功能(在第2403行中执行验证)来破解的。

this.checkNameAvailability = function (onSuccess) {
            if (!$scope.policy.name || $scope.policy.name.trim().length == 0) {
                return;
            }
            ResourceServerPolicy.search({
                realm: $route.current.params.realm,
                client: client.id,
                name: $scope.policy.name
            }, function(data) {
                if (data && data.id && data.id != $scope.policy.id) {
                    Notifications.error("Name already in use by another policy or permission, please choose another one.");
                } else {
                    onSuccess();
                }
            });
}

this.checkNameAvailability = function (onSuccess) {
    onSuccess();
}

最后成功添加了策略。仍然看起来像是UI错误。