我想使用KeyCloak的authorizaion系统创建一个相当简单的基于角色的访问控制系统。Keycloak正在替换的系统允许我们创建一个“用户”,该用户是一个或多个“组”的成员。在这个遗留系统中,用户可以通过组成员资格(其中组被分配权限)或直接向用户授予权限来访问大约250个“功能”中的每一个。
我想将遗留系统映射到keycloak授权。
谢谢,
标记
我知道我晚了2年多,但我想我会分享我所知道的,希望能为未来的读者减轻一些痛苦。完全透明--我绝不是一个KeyCloak/OAuth/OIDC专家,我所知道的主要是从阅读文档、书籍、优秀的OL'YouTube和玩这个工具中获得的。
该员额将由两部分组成:
KeyCloak 8.0.0
.最佳实践是只创建一个“视图”范围,并跨多个资源(帐户、事务等)使用它吗?还是应该创建“ViewAccount”作用域、“ViewTransaction”作用域等?
作用域表示受保护资源上的一组权限。在您的示例中,您有两个资源:account
和transaction
,所以我倾向于使用第二种方法。
从长远来看,具有与所有资源关联的全局视图
作用域(例如帐户
、事务
、客户
、结算
...)使授权难以管理和适应安全需求的变化。
但是请注意--我并不是说您不应该在资源之间共享作用域。事实上,KeyCloak
允许对具有相同类型
的资源进行这种操作。例如,您可能需要viewaccount
和viewtransaction
作用域来读取给定帐户下的事务(毕竟,您可能需要访问该帐户才能查看事务)。您的要求和标准将严重影响您的设计。
对于资源和范围的每一个实际组合,通常的做法是创建一个权限吗?
你如何去设置这一切完全取决于你。例如,您可以:
>
定义单个策略,并将每个策略绑定在适当的权限下。
更好的方法是定义单个策略,然后将所有相关策略分组到聚合
策略(策略的策略)下,然后将该聚合策略与基于作用域的
权限关联。您可以将scoped-based
权限应用于资源及其所有关联的作用域。
如果有多个权限匹配给定的资源/范围,那么Keycloak做什么?
这取决于
决策策略
决策策略
逻辑
值。权限一
将决策策略
设置为肯定
。它还有3个策略,每个策略的评估值为:
真
false
false
由于其中一个策略被设置为true
,所以权限一
被设置为true
(肯定--只有1需要为true
)。
真
false
我们会继续重温这个。我将在第二部分中解释如何设置资源服务器的决策策略
。
例如,我可以有访问“帐户”的权限和“查看”范围的权限,所以我有查看帐户的权限?
简短的回答是肯定的。现在,让我们进一步展开:)
如果你有这个
决策策略
设置为肯定
帐户/{id}
资源的权限为真
视图
范围的权限为false
您还将被授予查看该帐户的权限。
差不多吧。有很多方法可以设置这个。例如,您可以:
/account/{id}
),并将其与account:view
作用域关联。helpdesk
角色作用域
的权限,称为viewaccount
,并将其与作用域
、资源
和策略
我们将在第二部分设置类似的内容。
bank_teller
和account_owner
可以访问/account/{id}
资源account_owner
有权访问帐户:查看
作用域用户
无权访问资源或作用域请原谅我,这个例子不现实,但我不熟悉银行业:)
cd tmp
wget https://downloads.jboss.org/keycloak/8.0.0/keycloak-8.0.0.zip
unzip keycloak-8.0.0.zip
cd keycloak-8.0.0/bin
./standalone.sh
http://localhost:8080/auth
管理控制台
链接users
链接添加用户
按钮用户名
(例如bob
)User Enabled
保存
请参见创建新用户
角色
链接添加角色
bank_teller
、account_owner
和user
同样,不要将用户与角色关联。为了我们的目的,这是不需要的。
参见角色
客户端
链接创建
客户端ID
bank-api
根URL
,输入http://127.0.0.1:8080/bank-api
保存
客户端协议
是openid-connect
访问类型
更改为机密
授权启用
更改为
- 向下滚动并单击
save
。一个新的Authorization
选项卡应该出现在顶部。 - 单击
授权
选项卡,然后单击设置
- 确保
决策策略
设置为一致
- 这是资源服务器的
决策策略
null
null
null
请参见创建资源
- 再次在
授权
选项卡下,单击策略
- 从
创建策略
下拉菜单 中选择
角色
- 在
名称
部分中,键入仅限银行出纳员和帐户所有者策略
- 在
领域角色
下,选择bank_teller
和account_owner
角色
- 确保
逻辑
设置为正
- 单击
保存
- 单击
策略
链接
- 再次从
Create Policy
下拉菜单中选择Role
。
- 这次对
名称
使用
仅限帐户所有者策略
- 在
领域角色
下选择account_owner
- 确保
逻辑
设置为正
- 单击
保存
- 单击顶部的
policy
链接,您现在应该看到新创建的策略。
参见基于角色的策略
null
- 再次在
Authorization
选项卡下,选择Evalue
- 在
用户
下输入bob
- 在
角色
下选择用户
- 这是我们将用户与我们创建的角色关联的地方。
![](https://imgs.xnip.cn/cj/n/85/2813aa0c-8c34-465e-ad25-7b7914aebf48.png)
参见评估和测试策略
- 返回
权限
部分
- 在
Create Permission
下拉菜单下选择scope-based
。
- 在
名称
下,输入查看帐户范围权限
- 在
范围
下,输入帐户:查看
- 在
应用策略
下,输入仅限帐户所有者策略
- 确保
决策策略
设置为一致
- 单击
保存
null
整洁:)希望这能有所帮助。
你能给我提供一个资源范围使用或建议的例子吗?
我正计划使用JWT。JWT将包含权限列表,单个微服务将使用“位置”和“权限”的组合来确定。 不幸的是,我无法在Keycloak中配置客户端来分配策略和权限,也无法在Internet上找到任何示例。
http://${host}:${port}/auth/realms/${realm_name}/authz/protection/resource_set 但是我没有看到一个API来CRUD授权策略和权限。 我试图通过protection/resource_setendpoint创建策略,但失败了:
正如在链接https://developers.DocuSign.com/esign-rest-api/guides/authentication/oauth2-code-grant中提到的,DocuSign允许获取用户数据的三个访问范围:签名、扩展和模拟。我正在寻找一个范围,允许我只读取访问。我需要建立一个仪表板的各种活动/更新(获得所有信封的状态,等等)的所有DocuSign用户在我的公司。
我有以下场景:一个客户端应用程序试图访问API网关后面的APIendpoint。我想验证(使用id和秘密)应用程序,如果它是应用程序A允许它访问endpoint/信用,如果它是应用程序B允许它访问endpoint/借方。 我假设API网关应该验证一个调用是否应该被拒绝。你能告诉我我的工作流应该是什么样子,我应该使用什么Keycloak功能吗?
我试图更好地理解一旦Android11版本发布,我将能够做什么。 我的应用程序使用提供的图像文件路径创建相册,但使用Android11,我将无法直接访问文件。 根据Android开发人员的文档,他们最近引入了权限,但我不明白如果添加了这个权限,我是否能够继续通过访问文件。 有人有主意吗??? 谢谢 2021年1月更新 我在一个Android11虚拟设备上试用了我的应用程序,它似乎可以完美地工作,即