Keycloak API 创建用户 returns 403 Forbidden
Keycloak API to create users returns a 403 Forbidden
试验使用 Keycloak 作为身份提供者。我是 运行 通过使用 ./standalone.sh
脚本。
所以,我得到了这样的 access_token
:
curl --request POST \
--url http://localhost:8080/auth/realms/master/protocol/openid-connect/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials \
--data client_id=admin-cli \
--data client_secret=<the-client-secret-under-master-realm-for-admin-cli-client>
回复:
{
"access_token": "the-access-token",
"expires_in": 60,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "profile email"
}
然后很快,在我的 test-realm
下,我尝试创建一个用户,如下所示:
curl --request POST \
--url http://localhost:8080/auth/admin/realms/test-realm/users \
--header 'Authorization: Bearer the-access-token' \
--header 'Content-Type: application/json' \
--data '{
"firstName": "Sergey",
"lastName": "Kargopolov",
"email": "test@test.com",
"enabled": "true",
"username": "app-user"
}'
然后我被 403
击中:
< HTTP/1.1 403 Forbidden
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Referrer-Policy: no-referrer
< Date: Thu, 28 Jan 2021 23:43:57 GMT
< Connection: keep-alive
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< X-Content-Type-Options: nosniff
< Content-Type: application/json
< Content-Length: 25
有什么我想念的吗?我正在关注 this tutorial,并且我所做的一切都完全按照描述进行!
编辑:我尝试了密码授予方式来获取不记名令牌并且有效,但不是客户端秘密方式。我显然更喜欢客户端秘密方式(这是我目前遇到的问题)。这可能是什么问题?
要使用 Keycloak Rest API 创建用户,只需向 admin-cli 客户端请求一个代表管理员用户的令牌,方法是提供其名称和密码,例如:
TOKEN=$(curl -k -sS -d "client_id=admin-cli" \
-d "username=$ADMIN_NAME" \
-d "password=$ADMIN_PASSWORD" \
-d "grant_type=password" \
http://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token)
从 $TOKEN 对象中提取访问令牌(让我们命名为 $ACCESS_TOKEN
)。
然后创建用户如下:
curl -k -sS -X POST https://$KEYCLOAK_IP/auth/admin/realms/$REALM_NAME/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "$USER_JSON_DATA"
$USER_JSON_DATA
将是要创建的用户的 json 数据表示。无需将 admin 角色添加到默认使用 Keycloak 部署的 master admin。
如果正常设置,您只需要知道(正如我已经描述的那样)管理员的 名称和密码,无论如何这都是在初始设置中配置的。
如果您单击 admin 用户 > 角色,您将看到以下内容:
admin 用户,已经拥有 admin 角色。
Edit: I tried the Password Grant way to obtain the Bearer Token and
that worked, but NOT the client secret way. I obviously prefer the
client secret way (which is where I'm stuck currently). What could be
the issue here?
现在,如果您完全按照原来的方式更改 admin_cli 配置,则需要向 Service-account-admin-cli
用户添加管理员角色。
现在的问题是 Service-account-admin-cli
用户是 User 部分中的 。尽管如此,您可以执行以下操作:
- 使用您的设置再次请求管理员令牌;
- 转到 Master Realm > Clients > admin-cli > Session > 单击 [Show Session]:
- 点击用户
service-account-admin-cli
;
- 转到角色映射;
- 分配
admin
角色;
由于 service-account-admin-cli
用户现在具有 admin
角色,代表该用户的令牌请求将包含创建用户所需的权限。
如果上述方法不起作用,请执行以下操作:
- 领域大师;
- 客户端 > admin-cli;
- 转到映射器;
- 点击[创建];
- 作为映射器类型select“硬编码角色”;
- 单击 Select 角色和 selection“管理员”;
- 点击[保存]。
试验使用 Keycloak 作为身份提供者。我是 运行 通过使用 ./standalone.sh
脚本。
所以,我得到了这样的 access_token
:
curl --request POST \
--url http://localhost:8080/auth/realms/master/protocol/openid-connect/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials \
--data client_id=admin-cli \
--data client_secret=<the-client-secret-under-master-realm-for-admin-cli-client>
回复:
{
"access_token": "the-access-token",
"expires_in": 60,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "profile email"
}
然后很快,在我的 test-realm
下,我尝试创建一个用户,如下所示:
curl --request POST \
--url http://localhost:8080/auth/admin/realms/test-realm/users \
--header 'Authorization: Bearer the-access-token' \
--header 'Content-Type: application/json' \
--data '{
"firstName": "Sergey",
"lastName": "Kargopolov",
"email": "test@test.com",
"enabled": "true",
"username": "app-user"
}'
然后我被 403
击中:
< HTTP/1.1 403 Forbidden
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Referrer-Policy: no-referrer
< Date: Thu, 28 Jan 2021 23:43:57 GMT
< Connection: keep-alive
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< X-Content-Type-Options: nosniff
< Content-Type: application/json
< Content-Length: 25
有什么我想念的吗?我正在关注 this tutorial,并且我所做的一切都完全按照描述进行!
编辑:我尝试了密码授予方式来获取不记名令牌并且有效,但不是客户端秘密方式。我显然更喜欢客户端秘密方式(这是我目前遇到的问题)。这可能是什么问题?
要使用 Keycloak Rest API 创建用户,只需向 admin-cli 客户端请求一个代表管理员用户的令牌,方法是提供其名称和密码,例如:
TOKEN=$(curl -k -sS -d "client_id=admin-cli" \
-d "username=$ADMIN_NAME" \
-d "password=$ADMIN_PASSWORD" \
-d "grant_type=password" \
http://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token)
从 $TOKEN 对象中提取访问令牌(让我们命名为 $ACCESS_TOKEN
)。
然后创建用户如下:
curl -k -sS -X POST https://$KEYCLOAK_IP/auth/admin/realms/$REALM_NAME/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "$USER_JSON_DATA"
$USER_JSON_DATA
将是要创建的用户的 json 数据表示。无需将 admin 角色添加到默认使用 Keycloak 部署的 master admin。
如果正常设置,您只需要知道(正如我已经描述的那样)管理员的 名称和密码,无论如何这都是在初始设置中配置的。
如果您单击 admin 用户 > 角色,您将看到以下内容:
admin 用户,已经拥有 admin 角色。
Edit: I tried the Password Grant way to obtain the Bearer Token and that worked, but NOT the client secret way. I obviously prefer the client secret way (which is where I'm stuck currently). What could be the issue here?
现在,如果您完全按照原来的方式更改 admin_cli 配置,则需要向 Service-account-admin-cli
用户添加管理员角色。
现在的问题是 Service-account-admin-cli
用户是 User 部分中的
- 使用您的设置再次请求管理员令牌;
- 转到 Master Realm > Clients > admin-cli > Session > 单击 [Show Session]:
- 点击用户
service-account-admin-cli
; - 转到角色映射;
- 分配
admin
角色;
由于 service-account-admin-cli
用户现在具有 admin
角色,代表该用户的令牌请求将包含创建用户所需的权限。
如果上述方法不起作用,请执行以下操作:
- 领域大师;
- 客户端 > admin-cli;
- 转到映射器;
- 点击[创建];
- 作为映射器类型select“硬编码角色”;
- 单击 Select 角色和 selection“管理员”;
- 点击[保存]。