使用keycloak

时间:2017-10-10 14:36:59

标签: spring rest keycloak

我有以下设置 - Spring SAAS REST服务,它允许不同的公司管理不同的事件。还有一个休息客户端(移动应用程序),每个公司单独发货。 我想使用keycloak作为安全性的东西,我有一个如何将一家公司与另一家公司分开的问题。

我需要companyA无法访问companyB事件,并且在公司内部也需要不同的角色 - 有些可以创建事件,有些可以只读取它。

首先我认为每个公司都会在keycloak中创建自己的领域,但我了解到这个领域实际上是在Spring引导REST服务参数中指定的,如

  

keycloak.realm =演示领域

这意味着每个REST应用程序只有一个领域。而且我不想为每个客户端配置REST服务实例。我只需要一个REST规则。

我是否尝试使用一些不适合我用例的内容?

为每个公司配置一个keycloack组是否正确,并以一种方式创建逻辑,使得一个组的用户无法访问其他组创建的内容。但实际上它感觉不对,因为我理解组应该以不同的方式使用 - 拥有管理组和用户组等,隔离用户"垂直"通过"特权",而不是"水平"。

你能为这个问题建议一个正确的方法吗?

1 个答案:

答案 0 :(得分:1)

我会实现一个自定义协议映射器,它为您的应用程序加载额外的用户权限并将它们存储在令牌中。这样,您使用单一领域,如果将来有更多公司,它可以很好地扩展。在这里,您已经了解了an example如何实施它。

基本上,访问令牌的otherClaims字段是一个JSON字段,允许设置属性映射。您可以在此处添加字段,例如:

userAccessibleCompanyIds: [1,3,4]

如何为具体用户加载公司ID?您可以从映射器访问应用程序数据库,也可以使用REST API获取它们。

然后在您的应用程序中,您需要控制用户访问的内容。我所做的是解码令牌,看看用户请求是否适合。如果没有,请返回403响应。