使用Admin REST API创建Keycloak领域

时间:2020-03-21 11:43:11  来源:igfitidea点击:

Keycloak提供了功能齐全的Admin REST API。

创建一个新领域

配置环境,根据需要更改详细信息以匹配系统。

NEW_REALM="example"
KEYCLOAK_URL=http://127.0.0.1:8080
KEYCLOAK_REALM="master"
KEYCLOAK_USER="admin"
KEYCLOAK_SECRET="changeme"
REALM_FILE="realm.json";
CURL_CMD="curl --silent --show-error"

文件“ realm.json”的内容可以在下面看到。

{
   "realm":"example",
   "notBefore":0,
   "enabled":true,
   "sslRequired":"all",
   "bruteForceProtected":true,
   "failureFactor":10,
   "eventsEnabled":false
}

获取访问令牌

获取访问令牌:

ACCESS_TOKEN=$(${CURL_CMD} \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=${KEYCLOAK_USER}" \
  -d "password=${KEYCLOAK_SECRET}" \
  -d "grant_type=password" \
  -d 'client_id=admin-cli' \
  "${KEYCLOAK_URL}/auth/realms/${KEYCLOAK_REALM}/protocol/openid-connect/token"|jq -r '.access_token')

响应主体为JSON,我们使用'jq'提取'access_token'属性的值。
我见过人们使用'sed',我认为'jq'更容易。

(可选)检查令牌:

echo ${ACCESS_TOKEN}

创建一个新的领域:

${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${REALM_FILE}" \
  "${KEYCLOAK_URL}/auth/admin/realms";

验证领域已创建:

${CURL_CMD} \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}"|jq -r .|head;

API范例

这些是API示例,而不是实际配置。

文件“ client.json”的内容可以在下面看到。

{
   "clientId":"example",
   "rootUrl":"https://example.com/example/",
   "adminUrl":"https://example.com/example/"
}

创建一个新客户端:

CLIENT_FILE="client.json";
${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${CLIENT_FILE}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}/clients";

更新领域的顶级信息:

${CURL_CMD} \
  -X PUT \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${NOT_A_REAL_FILE_JUST_AN_EXAMPLE}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}";

创建一个新的身份提供者实例:

${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${NOT_A_REAL_FILE_JUST_AN_EXAMPLE}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}/identity-provider/instances";

创建一个新的身份提供程序映射器:

${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${NOT_A_REAL_FILE_JUST_AN_EXAMPLE}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}/identity-provider/instances/${IDP_ALIAS}/mappers";

创建一个新的身份验证流程配置:

${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${NOT_A_REAL_FILE_JUST_AN_EXAMPLE}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}/authentication/flows";

提高执行优先级:

${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}/authentication/executions/${EXECUTION_ID}/raise-priority";

添加新的身份验证执行:

${CURL_CMD} \
  -X POST \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d @"${NOT_A_REAL_FILE_JUST_AN_EXAMPLE}" \
  "${KEYCLOAK_URL}/auth/admin/realms/${NEW_REALM}/authentication/executions";