Authentication 对匿名和经过身份验证的用户使用JWT

Authentication 对匿名和经过身份验证的用户使用JWT,authentication,authorization,jwt,multi-tenant,Authentication,Authorization,Jwt,Multi Tenant,我正在尝试构建一个纯JavaScript rest客户端应用程序,该应用程序必须支持从rest服务器匿名检索信息,而rest服务器已经支持JWT用于外部应用程序的身份验证/授权。该服务器已被支持多租户的其他客户端应用程序使用。实际将租户信息嵌入到JWT中 除此之外,应用程序还需要支持希望将某些资源标记(或选择)为收藏夹的用户(人类),因此需要一种机制来创建用户/角色,并对用户进行进一步的身份验证/授权。但是这些用户不能孤立于单个租户,他们希望跨租户使用资源 所以,现在我发现我需要使用一个JWT值

我正在尝试构建一个纯JavaScript rest客户端应用程序,该应用程序必须支持从rest服务器匿名检索信息,而rest服务器已经支持JWT用于外部应用程序的身份验证/授权。该服务器已被支持多租户的其他客户端应用程序使用。实际将租户信息嵌入到JWT

除此之外,应用程序还需要支持希望将某些资源标记(或选择)为收藏夹的用户(人类),因此需要一种机制来创建用户/角色,并对用户进行进一步的身份验证/授权。但是这些用户不能孤立于单个租户,他们希望跨租户使用资源

所以,现在我发现我需要使用一个JWT值来进行匿名数据检索,这当然应该是租户不可知的。这意味着我必须创建一个具有特殊角色的用户,该用户只具有只读资源的权限,但用户创建权限(当客户端注册时)除外。这应该是租户无关的。当用户登录到系统中时,JWT应该被替换为具有用户凭据的JWT,再次与租户无关。我不确定这是否完全正确,那么我们应该如何处理这种情况呢

我的另一个担忧是,我们为人工客户端(租户不可知)和应用程序客户端(租户感知)提供了相同的支持身份验证和凭据存储的后端,因此在这里处理特权和租户限制的逻辑稍微复杂一些。这可能只是我的印象,但我觉得在逻辑和/或数据存储中,应用程序用户和人类用户之间应该有一个分离


但我不完全确定,我想知道你们中的一些人是否有过这方面的经验,或者对这方面有什么想法

您可以尝试以下方法,创建用户,为用户分配他们需要访问的租户的只读角色

数据会是这样的 User1-租户1-管理角色 User1-租户2-数据读取器角色 User1-租户3-用户角色

在jwt中,我们确保用户得到授权。然后我们得到可访问租户的列表,看看他是否有权访问请求的租户数据w.r.访问上述数据,然后完成授权


HTH

谢谢,我将尝试您的方法并再次评论体验,可能我的问题过于基于观点。最后,我使用了您的基于角色的逻辑方法,将客户端上的JWT替换为匿名或经过身份验证的用户,租户无关用户的数据存储现在已经分离,我发现将租户信息与JWT本身分离很有用,现在我在每个请求上都使用了一个特殊的头。目前它正在工作并可维护。谢谢你的想法。