在我公司,我们正在微服务之上构建应用程序。我们正在努力决定如何处理授权和认证。我们正在考虑使用OpenId Connect对用户进行身份验证的途径,但是在授权方面,我们需要一些建议。
让我解释一下解决方案的工作原理:一个用户可以在不同部门中扮演不同的角色,部门的数量可以超过200个。在每个部门中,用户可以拥有多个角色。我们了解,推荐的处理角色的方法是将其放入从客户端发送到服务器(JWT)的令牌中。但是,我们担心这会使令牌有效载荷过大。据我所知,浏览器最多可以容纳5KB的数据头。在我们的案例中,这意味着大约50个部门具有两个角色(未压缩)。这种方式的优点是,当用户进入微服务时,将对其进行授权和认证。正如我所提到的,缺点是令牌中的有效载荷很大。
我们还在寻找另一种选择,即将JWT保持在最低水平(用户ID和部门ID),并向Keycloak查询每个请求的用户权限(也许添加一些使用寿命较短的缓存机制)。这种方法将向授权服务器生成大量请求。
我要寻找的是其他人如何解决此问题的一些建议/经验。如果需要,我很乐意提供更多信息。
为使您更轻松地提出建议,以下是这两种选择的简短说明: 1)使用JWT处理身份验证和授权?为什么? 2)保持JWT轻巧,并向每个微服务中的授权服务器发出请求?为什么?
答案 0 :(得分:0)
我想说两个选择:
因此
与选项1相同,除了可以使用用户权限DB上的更改数据捕获(CDC)来使高速缓存随着访问权限的更改而更新。