我的推理是基于这样一个前提,即涉及安全性时,不应重塑方向,最好研究哪种可用的解决方案最合适。
假设您有一个应用程序,允许用户创建事物,并允许其朋友以某种方式对其进行更改。我想在这种情况下使用基于角色的方法将无法很好地工作,并且类似的访问控制列表之类的东西更接近理想。
按照我在第一段中提出的前提,我研究了Keycloak的文档,以寻找类似于ACL的内容,因为我还需要一种身份验证机制。至少可以说,我无法提出一种没有“ hacky”感觉的解决方案...
[我想问的不是写详尽的清单,而是要问:
谢谢!
编辑(14/05/20)
为了进一步讨论该主题,我将提供一个更具体(尽管很简单)的示例。我还将分享Keycloak的主要贡献者的一些建议。
假设我们正在开发一个简单的Medium克隆,该克隆允许用户共同编辑文章。Lance是已经注册并经过身份验证的用户,想要开始在自行车上写文章,因此他导航到我们SPA中的“编辑屏幕”。然后,Lance为其命名,输入一些单词,然后单击“创建”按钮,该按钮将POST请求发送到资源服务器(已由Keycloak保护)。然后,资源服务器(服务)将:1.将文章保存到数据库中;2.通过Keycloak的Protection API创建资源,将其owner属性设置为Lances的用户ID,并使用空的“ editors”属性。
Lance后来认为,最好也得到他的朋友Chris的意见,因此将他添加到编辑列表中。也可以通过Keycloak的Protection API来完成。
然后,此设置将使我们能够设置基于JavaScript的策略来保护进一步的编辑。
您的推理是正确的,因为它实际上符合“资源”的定义。作为您自己的应用程序资源服务器,Keycloak会根据您的考虑提供是否访问它的授权。
我想您的具体案例由User Managed Access涵盖:
例如,考虑一个用户Alice(资源所有者)使用网上银行服务(资源服务器)以管理其银行帐户(资源)。有一天,爱丽丝决定向鲍勃开设银行帐户。(请求方),会计专业人员。但是,鲍勃应该仅有权查看(范围)爱丽丝的帐户。
作为资源服务器,Internet Banking Service必须能够保护爱丽丝的银行帐户。为此,它依赖于Keycloak资源注册端点在服务器上创建一个资源代表爱丽丝的银行帐户。
[目前,如果Bob尝试访问Alice的银行帐户,请访问将被拒绝。网上银行服务定义了一些默认值银行帐户政策。其中之一是,只有所有者在这种情况下,爱丽丝被允许访问她的银行帐户。
但是,关于爱丽丝隐私的网上银行服务允许她更改银行帐户的特定政策。之一她可以更改的这些政策是为了确定哪些人是允许查看她的银行帐户。为此,网上银行服务依靠Keycloak为Alice提供一个可以选择的空间个人及其允许访问的操作(或数据)。爱丽丝可以随时撤消访问权限或授予其他权限给鲍勃。
对于您来说,资源将是thing,并且您的应用程序需要在资源注册端点中注册它。然后,您可以使用策略来定义who访问资源和how。
从我在问题中提到的撰稿人告诉我的内容(编辑后),这种推理是正确的,这是可以完成的一种方法。另外,正如@Xtreme Biker所说,我们还可以利用Keycloak提供的UMA功能来让用户管理其资源。
贡献者还说,应该权衡开销,并且此解决方案的重复可能会增加并考虑使细粒度的授权更接近应用程序/资源服务器/服务。