Keycloak 如何从KeyClope admin cli v6.0.1调用testLDAPConnection方法?

Keycloak 如何从KeyClope admin cli v6.0.1调用testLDAPConnection方法?,keycloak,keycloak-services,Keycloak,Keycloak Services,我们刚刚将KeyClope服务器从版本3升级到版本6.0.1。 我们有一些自定义脚本,可以与keydape admin cli一起使用,用于测试LDAP用户存储连接 但是,在版本6.0.1中,方法testLDAPConnection似乎不再有效,因为它返回http405方法notallowed 似乎testLDAPConnection方法已更改,它不接受GET请求,只接受POST请求。 声明testLDAPConnection方法仍然可以按旧方式使用: $ kcadm.sh get te

我们刚刚将KeyClope服务器从版本3升级到版本6.0.1。 我们有一些自定义脚本,可以与keydape admin cli一起使用,用于测试LDAP用户存储连接

但是,在版本6.0.1中,方法
testLDAPConnection
似乎不再有效,因为它返回http405方法notallowed

似乎
testLDAPConnection
方法已更改,它不接受GET请求,只接受POST请求。 声明
testLDAPConnection
方法仍然可以按旧方式使用:

    $ kcadm.sh get testLDAPConnection -q action=testConnection -q bindCredential=secret -q bindDn=uid=admin,ou=system -q connectionUrl=ldap://localhost:10389 -q useTruststoreSpi=ldapsOnly
这将使用HTTP 405失败

我尝试使用create动词,如下所示:

$kcadm.sh创建testLDAPConnection-s action=testConnection-s bindCredential=secret-s bindDn=uid=admin,ou=system-s connectionUrl=ldap://localhost:10389 -s useTruststoreSpi=ldapsOnly

我希望此操作返回HTTP 204代码,但它会导致一条错误消息,显示“LDAP测试错误”,原因是“KC-SERVICES0054:未知操作:null”

该方法似乎是可访问的,但参数没有正确发送。 我在源代码中注意到,只有
testLDAPConnection
方法具有FormParam参数类型,因此我猜测admin cli不知道如何设置这些类型

我已经在KeyClope问题积压中搜索了这个问题,但没有找到任何东西


任何人都有这个问题,或者知道如何解决它吗?

看起来这在KeyClope v7中也是一个问题,所以我决定创建一个脚本来解决这个问题

基本上,我请求一个令牌,然后使用该令牌调用testLDAPConnectionAPI

以下是脚本:

#!/bin/bash

KC_USERNAME=$1
KC_PASSWORD=$2
KC_SERVER=$3
KC_CLIENT_ID=$4
KC_CLIENT_SECRET=$5
REALM_NAME_IMPORT=$6
KC_CONTEXT=auth
CURL_OPTS="-k --noproxy $KC_SERVER"

# Request Token
KC_RESPONSE=$( \
   curl $CURL_OPTS -X POST \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "username=$KC_USERNAME" \
        -d "password=$KC_PASSWORD" \
        -d 'grant_type=password' \
        -d "client_id=$KC_CLIENT_ID" \
        -d "client_secret=$KC_CLIENT_SECRET" \
        "http://$KC_SERVER/$KC_CONTEXT/realms/master/protocol/openid-connect/token" \
    | jq .
)

# Split token
KC_ACCESS_TOKEN=$(echo $KC_RESPONSE| jq -r .access_token)

# Verify if there is an acces token 
if [ $KC_ACCESS_TOKEN  ]; then

    echo "Token acquired successfully"
    exec 3>&1 

    # iterate through the hostnames csv file
    while IFS="," read -r cluster hostname bindcredential; do

        # Test if the given pair of LDAP host name and password is valid 
        KC_RESPONSE_LDAP_TEST=$( \
            curl -w "%{http_code}" -o >(cat>&3) $CURL_OPTS \
                -X POST \
                -H "Content-Type: application/x-www-form-urlencoded" \
                -H "Authorization: Bearer $KC_ACCESS_TOKEN" \
                -d "action=testAuthentication&bindCredential=$bindcredential&bindDn=cn=root,o=test,c=ro&connectionTimeout=&connectionUrl=ldap://$hostname:389/&realm=$REALM_NAME_IMPORT&useTruststoreSpi=ldapsOnly" \
                "http://$KC_SERVER/$KC_CONTEXT/admin/realms/$REALM_NAME_IMPORT/testLDAPConnection"  \
    | jq .
)
        # if the response is valid(204) we continue do whatever we want to
        if [ "$KC_RESPONSE_LDAP_TEST" == "204" ]; then
            echo "Keycloak testAuthentication for configuration "$hostname" was successful."
         else
            echo "ERROR: Couldn't connect with "$hostname" or authentication failed (incorrect password)"
        fi

    done < ldaps.csv

else
    echo "UNAUTHORIZED. No access token available"
fi
#/bin/bash
KC_用户名=$1
KC_密码=$2
KC_服务器=$3
KC_客户_ID=$4
KC_客户_机密=$5
领域\名称\导入=$6
KC_CONTEXT=auth
CURL_OPTS=“-k--noproxy$KC_服务器”
#请求令牌
KC_响应=$(\
curl$curl_OPTS-X POST\
-H“内容类型:应用程序/x-www-form-urlencoded”\
-d“用户名=$KC_用户名”\
-d“密码=$KC_密码”\
-d'授权类型=密码'\
-d“客户id=$KC\U客户id”\
-d“客户机密=$KC客户机密”\
“http://$KC_服务器/$KC_上下文/领域/主/协议/openid连接/令牌”\
|jq。
)
#分割令牌
KC_访问_令牌=$(echo$KC_响应| jq-r.ACCESS_令牌)
#验证是否存在acces令牌
如果[$KC_访问_令牌];然后
echo“已成功获取令牌”
执行3>&1
#遍历主机名csv文件
而IFS=“,”读取-r集群主机名;做
#测试给定的LDAP主机名和密码对是否有效
KC_响应_LDAP_测试=$(\
curl-w“{http_code}”-o>(cat>&3)$curl\u选项\
-X柱\
-H“内容类型:应用程序/x-www-form-urlencoded”\
-H“授权:持票人$KC_访问_令牌”\
-d“action=testAuthentication&bindCredential=$bindCredential&bindDn=cn=root,o=test,c=ro&connectionTimeout=&connectionUrl=ldap://$hostname:389/&realm=$realm\u NAME\u IMPORT&useTruststoreSpi=ldapsOnly”\
“http://$KC_服务器/$KC_上下文/admin/realms/$REALM_名称\u导入/testLDAPConnection”\
|jq。
)
#如果响应有效(204),我们继续做我们想做的任何事情
如果[“$KC_响应_LDAP_测试”==“204”];然后
echo“配置“$hostname”的KeyClope testAuthentication已成功。”
其他的
echo“错误:无法连接到“$hostname”或身份验证失败(密码不正确)”
fi
完成
我从命令行运行脚本:

./testLDAPConnection.sh <username> <password> <keycloak_server> <client_id> <client_secret> <realm_to_operate>
/testLDAPConnection.sh

我有完全相同的错误。KeyClope issue tracker()上已打开一个bug,但尚未有响应……已确认这是kcadmin和文档中的一个问题。应在9.0.1版中修复