gpt4 book ai didi

node.js - Keycloak:使用 nodeJS 的 authZ

转载 作者:行者123 更新时间:2023-12-04 21:14:35 25 4
gpt4 key购买 nike

我正在尝试使用 keycloak 授权机制来保护 REST API。
我的 API 在带有 express 的 NodeJS 中。
假设我有这个 API:

http://www.example.com/api/v1/houses

端点支持 GET/POST/PUT/DELETE。
房子有名字和主人:
{
name: 'myhouse',
owner: 'smith'
}

每个人都可以查看房屋。您还可以创建房屋,并自动成为所有者。只有所有者才能删除房屋。它类似于 photoz example .

使用 Keycloak Connect在仅承载模式下适用于 nodeJS express:
router.get('/houses*', keycloakProtect(), myHandler)

但这仅提供身份验证,而不提供授权。基本上它只是检查您是否提供了正确的 token 。
KeycloakProtect提供了一个基本的授权机制,仅基于角色名称。
但是,我想使用客户端授权的全部功能(包括资源、范围和策略)......
是否有任何 NodeJS 支持?如果没有,如何使用 Keycloak API?

最佳答案

我使用 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:/houses/*
  • 范围 创建 4 个作用域:创建、查看、更新、删除
  • 政策 使用以下命令创建基于角色的策略:
  • 名称:public_role_policy
  • 描述:用户必须具有“公共(public)”角色才能被允许
  • 领域角色:公共(public)
  • 权限 创建一个:
  • 名称:“公共(public)角色允许查看房屋”
  • 资源:房屋
  • 范围:查看
  • 政策:public_role_policy

  • 您还必须创建一个“公共(public)”领域角色并将其提供给您的用户。

    接下来你需要做的是远程创建资源。
    首先获取客户端 token :
    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"
    }'

    关于node.js - Keycloak:使用 nodeJS 的 authZ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47282818/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com