将 JWT 用于匿名和经过身份验证的用户
Posted
技术标签:
【中文标题】将 JWT 用于匿名和经过身份验证的用户【英文标题】:Using JWT for anonymous and authenticated users 【发布时间】:2017-04-20 00:56:41 【问题描述】:我正在尝试构建一个纯 javascript REST 客户端应用程序,该应用程序必须支持从 REST 服务器匿名检索信息,该服务器已经支持 JWT 用于外部应用程序的身份验证/授权。该服务器已被支持多租户的其他客户端应用程序使用。实际上在 JWT 中嵌入了租户信息。
除了应用程序需要支持想要将某些资源标记(或选择)为收藏夹的用户(人类)之外,因此需要一种机制来创建用户/角色并为用户提供进一步的身份验证/授权。但是这些用户不能被隔离到单个租户,他们会希望使用跨租户资源。
所以,现在我发现我需要使用 JWT 值来进行匿名数据检索,这当然应该与租户无关。这意味着我必须创建一个具有特殊角色的用户,该角色只具有只读资源的权限,除了用户创建的权限(当客户端注册时),这应该与租户无关。并且当用户登录到系统时,JWT 应该被替换为具有再次与租户无关的用户凭据的 JWT。我不确定这是否完全正确,那么我们应该如何处理这种情况呢?
我的另一个担忧是,我们为人类客户端(与租户无关)和应用程序客户端(租户感知)提供相同的支持身份验证和凭据存储的后端),所以为了处理这里的权限和租户限制,逻辑有点复杂。这可能只是我的印象,但我觉得在逻辑和/或数据存储中应该将应用程序用户和人类用户分开。
但我不完全确定,我想知道你们中的一些人是否有以前的经验或者对这个话题有一些想法?
【问题讨论】:
【参考方案1】:您能否尝试以下方法,创建用户,为用户分配他们需要访问的租户的只读角色。
数据会像 User1 - 租户 1 - 管理角色 User1 - 租户 2 - 数据读取者角色 User1 - 租户 3 - 用户角色
在jwt中,我们保证用户是被授权的。然后我们得到可访问的租户列表,看看他是否可以访问请求的租户数据w.r.对上述数据,然后完成授权。
HTH
【讨论】:
谢谢你,我会尝试你的方法并再次评论经验,也许我的问题太基于意见了 最后,我使用了您的基于角色的逻辑方法,将客户端上的 JWT 替换为匿名或经过身份验证的用户,与租户无关的用户的数据存储现在已分离,我发现这很有用为了将租户信息与 JWT 本身分开,现在我在每个请求上都使用了一个特殊的标头。它正在工作并且现在可以维护。谢谢你的想法。以上是关于将 JWT 用于匿名和经过身份验证的用户的主要内容,如果未能解决你的问题,请参考以下文章
如何允许任何用户使用 Laravel JWT 身份验证访问路由?
JWT 从 Laravel 中的令牌中检索经过身份验证的用户