我正在使用 keycloak 4.8.3,我正在尝试使用管理 api 创建一个新的领域和用户。根据文档,它看起来像是导入调用。假设我在本地主机上运行 keycloak,api url 应如下所示http://localhost:8080/auth/
:我也对文档感到有点困惑,该文档在确切的路径上并不明确,POST /
所以不确定它是否是POST /admin/realms
.
我已经开始使用 ansible 来解决这个问题,但由于没有取得任何进展,我转向了简单的 REST。我已使用主用户名和密码来获取令牌调用/auth/realms/master/protocol/openid-connect/token
。看起来像下面的 POST 请求/响应,我要么调用了错误的 url,要么使用错误的 Content-Type 进行调用(尝试仅使用表单{"realm": "somerealm"}
url 编码类型发送,而 keycloak 仅返回 OK 等,但没有创建任何内容)。
> POST /auth/ HTTP/1.1
> Host: localhost:8080
> User-Agent: insomnia/6.5.4
> Content-Type: application/json
> Authorization: bearer eyJhbGcisomelongbearertoken"
> Accept: */*
> Content-Length: 373
| {
| "realm": "somerealm",
| "displayName": "somerealm",
| "enabled": true,
| "users": [
| {
| "email": "apigateway@example.com",
| "enabled": true,
| "firstName": "APIGateway",
| "lastName": "SomeProject",
| "usename": "api-manager",
| credentials: [
| {
| "temporary": false,
| "type": "password",
| "value": "somedecentpassword"
| }
| ]
| }
| ]
| }
* upload completely sent off: 373 out of 373 bytes
< HTTP/1.1 415 Unsupported Media Type
< Date: Tue, 25 Jun 2019 11:13:44 GMT
< Content-Length: 0
< Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
谁能暗示一下上面的问题吗?过去 24 小时我一直在处理这个问题,我想我需要来这里大声呼救。提前致谢
1) 在 Keycloak Web 控制台中单击“客户端”选项卡并创建一个新的机密客户端(称为realm-creator
),确保将Service Accounts Enabled
设置切换为ON
2) 转到Service account roles
选项卡并将create-realm
(来自Realm roles
组的)角色分配给您的客户。
3)获取访问令牌(我使用的是curl和jq)
KCHOST=https://yourkeycloak.com
REALM=master
CLIENT_ID=realm-creator
CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz
ACCESS_TOKEN=`curl \
-d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
-d "grant_type=client_credentials" \
"$KCHOST/auth/realms/$REALM/protocol/openid-connect/token" | jq -r '.access_token'`
Run Code Online (Sandbox Code Playgroud)
4)将你的领域放入realm.json
5)最后调用REST API端点:
curl -v -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @realm.json \
$KCHOST/auth/admin/realms
Run Code Online (Sandbox Code Playgroud)
PS 顺便说一句,为了调试,我刚刚编写了一个名为brauzie的 CLI 工具,它可以帮助您获取和分析 JWT 令牌(范围、角色等)。它可用于公共和机密客户。如果您愿意,也可以使用 Postman 和https://jwt.io 。
哈:)