【发布时间】:2016-01-10 08:36:18
【问题描述】:
让我们考虑一个简单的基于 REST 的 Web 服务来存储和检索 JSON 对象。无需任何身份验证,每个用户都可以访问任何数据。
现在让我们添加使用 JWT 来对用户进行身份验证。当然,由于我们没有进行授权,仍然每个用户都可以访问任何东西,但至少现在我们知道谁访问了什么。
下一步:存储对象时,将用户的sub声明与该对象一起保存,并验证用户的sub声明是否与请求的对象匹配,如果匹配,则交付。现在我们拥有基于每个用户的授权。到目前为止,很容易。
现在让我们添加让用户与其他用户共享对象的可能性。例如,为了简单起见,我们希望有预定义的组(即角色),并且我们想让用户选择哪个组(角色)可以访问他们创建的对象。这仍然很容易,因为您有一个预定义的组列表,因此您可以让用户选择一个或多个,并将它们附加到对象上。此外,身份提供者需要配置为将groups 声明放入每个用户的令牌中,以便我们可以匹配它们。从本段的长度我们已经可以看出,事情变得更加复杂。
问题 1:到目前为止,我是否正确,以这种方式处理“静态”组是否可行?
现在,让我们让用户有机会自己创建组。这仍然不复杂,但是我们如何让身份提供者使用动态创建的组呢?当然,我们不想让管理员每天更新身份提供者的配置;-)。
问题 2:我们如何处理动态创建的组?
现在,最后,让我们忘记组,假设我们希望允许用户能够简单地与其他用户共享他们的对象。这应该可以为每个对象单独配置。我们如何做到这一点?我们是否在对象上保存了用户列表?如果是这样,我们究竟要保存什么? sub 声明?如果是这样,所有者用户如何知道适当的值?还是……?
并且:假设用户想要将他们的朋友动态放入动态生成的圈子中,我们该怎么做?
问题 3:令牌和具有动态分配用户的动态创建组如何相互协作?
【问题讨论】:
标签: authentication authorization claims-based-identity jwt