我使用 API 找到了答案的开头:
TOKEN=`curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'username=username&password=password&grant_type=password&client_id=myclient&client_secret=myclientsecret' "http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token" | jq .access_token -r`
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d '{
"permissions" : [
{
"resource_set_name" : "Houses",
"scopes" : [
"view"
]
}
]
}' "http://localhost:8080/auth/realms/myrealm/authz/entitlement/myclient"
如果授权,第二个呼叫将回复 200,否则将回复 403。
要在 Keycloak 中定义授权策略,请在客户端中打开“授权”。在新的“授权”选项卡上:
- 设置
- 资源创建一个:
- 名称:房屋
- 范围:创建、查看、更新、删除
- URI:/房屋/*
- 范围创建 4 个范围:创建、查看、更新、删除
- 策略创建基于角色的策略:
- 名称:public_role_policy
- 描述:用户必须具有角色“public”才能被允许
- 领域角色:公共
- 权限创建一个:
- 名称:“公共角色允许查看房屋”
- 资源:房屋
- 范围:查看
- 政策:public_role_policy
您还必须创建一个“公共”领域角色并将其提供给您的用户。
接下来你需要做的是远程创建资源。首先获取客户端令牌:
TOKEN=`curl -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'grant_type=client_credentials&client_id=myclient&client_secret=myclientsecret'
"http://localhost:8080/auth/realms/${realm_name}/protocol/openid-connect/token" | jq .access_token -r`
然后创建资源:
curl -X POST "http://localhost:8080/auth/realms/myrealm/authz/protection/resource_set" -H "Authorization: Bearer $TOKEN" -d '{
"name": "My house",
"uri": "/houses/123",
"scopes": [
{
"id": "da776461-c1f5-4904-a559-1ca04d9f53a9",
"name": "view"
},
{
"id": "2615157c-f588-4e2b-ba1c-720fe8394215",
"name": "manage"
}
],
"owner": "0892e431-5daf-413e-b4cf-eaee121ee447"
}'