我想使用Keycloak的授权系统创建一个相当简单的基于角色的访问控制系统。系统Keycloak正在替换允许我们创建一个“用户”,他是一个或多个“组”的成员。在这个遗留系统中,用户被授予“权限”,可以通过组成员资格(其中组被分配权限)或直接授予用户权限来访问大约250个“能力”中的每一个。
我想将遗留系统映射到keycloak授权。
我应该很容易将现有系统中的每个“功能”映射到一个keycloak资源和一组keycloak范围。例如,“viewAccount”功能显然会映射到“帐户”资源和“视图”范围;并且“viewTransaction”映射到“事务”资源......但最佳做法是创建一个“视图”范围,并在多个资源(帐户,事务等)中使用它?或者我应该创建“viewAccount”范围,“viewTransaction”范围等?
同样,我对权限有点困惑。对于资源和范围的每个实际组合,通常的做法是创建权限吗?如果有多个权限匹配给定的资源/范围,Keycloak会做什么?我猜测Keycloak的意图是允许我配置针对资源和范围的权限矩阵,所以例如我可以获得访问“帐户”的权限和“查看”范围的权限,因此我有权限查看帐户?
我问,因为所有这些的结果似乎是我的旧“viewAccount”功能最终创建了一个“帐户”资源,具有“查看”范围和“viewAccount”权限,这似乎让我回到了哪里我曾是。如果这是正确的,那很好。
最后,显然我需要一组确定是否应该应用viewAccount的策略。但我是对的,这意味着我需要一个用户可能属于的每个遗留组的策略吗?例如,如果我有“帮助台”角色,那么我需要一个“帮助台会员”政策,然后我可以将其添加到“viewAccount”权限中。这是对的吗?
谢谢,
标记
答案 0 :(得分:5)
我希望通过纯HTTP方法强制执行授权,而不使用适配器,因为Lua没有适配器。希望这个答案能帮助人们寻找基于非适配器的方法。
如果您正在寻找适配器,那么quick start guide是最好的起点。尤其是spring boot authz example。
对于基于纯HTTP的实现:
步骤1:
中定义策略和权限第2步
具有一个内部映射,其中包含哪些HTTP路径属于哪些资源以及每个路径所需的作用域。也可以将其保存在configuration file中。当调用特定路由时,请调用Keycloak令牌终结点以验证访问令牌的声明。
{
"policy-enforcer": {
"user-managed-access" : {},
"enforcement-mode" : "ENFORCING"
"paths": [
{
"path" : "/someUri/*",
"methods" : [
{
"method": "GET",
"scopes" : ["urn:app.com:scopes:view"]
},
{
"method": "POST",
"scopes" : ["urn:app.com:scopes:create"]
}
]
}
]
}
}
如果您使用的是适配器,但未指定路径或资源,则适配器将在内部搜索路径和资源from Keycloak。
第3步:
使用令牌端点来get or evaluate权限。您可以使用response_mode
参数获取最终决定(是否提供访问权限)或检索整个权限。
curl -X POST \
http://${host}:${port}/auth/realms/${realm}/protocol/openid-connect/token \
-H "Authorization: Bearer ${access_token}" \
--data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
--data "permission=Resource A#Scope A"
如果授权请求未映射到任何权限,则将返回403
HTTP状态代码。
答案 1 :(得分:4)
我知道我参加聚会有点晚了,但让我尽可能多地解释一下。
在keycloak中,我们有这样的术语:
资源:用户将访问或执行操作的对象
Auth scopes :用户可以对特定对象执行的操作
政策:政策
权限:映射实际发生在这里
如果您不想遵循手动方式,您可以导出此 JSON 并且所有用户、资源、权限都将自动设置 bu keycloak
现在让我们看一个场景:
现在我们的资源很少,例如:
我们希望实现只有特定用户才能执行特定操作的场景。
创建新领域
检查决策策略是否设置为一致。这是资源服务器策略
转到授权标签 选择授权范围 >并点击创建 在文本中输入 scopes:create 和 scopes:view 并保存值。
您将看到授权被允许,因为管理员角色有权对资源进行创建和查看操作帐户。
您将看到授权为拒绝,因为只有 Super_Admin 角色有权对资源报告进行操作创建 .
答案 2 :(得分:0)
可以在此处找到具有资源、范围和权限的有效解决方案 keycloak-nodejs-example
使用 docker-compose 使用 Quick Start guide 运行已经配置好的 Keycloak。
项目中其他有用的例子