在设计基于活动的授权系统时,应该如何处理额外的条件检查?

时间:2017-06-17 06:08:16

标签: rest api security microservices

在设计基于活动的授权系统时,应该如何处理额外的条件检查?

例如,我有以下权限:

VIEW_COMPANY_TRANSACTIONS

允许用户点击端点

GET /company/{companyName}/transactions

但是,如果我的权限VIEW_COMPANY_TRANSACTIONS根据活动参数有其他限制,实际上有效地授权VIEW_COMPANY_TRANSACTIONS(companyName=company_a),那该怎么办?我不想将这些信息编码到权限系统中,最终得到以下新权限:

VIEW_COMPANY_TRANSACTIONS_FOR_COMPANY_A

上述权威似乎混淆了对观点和权威本身的过滤,这使得一切都变得有些乏味和不灵活。

在另一个例子中,我有以下权限:

APPROVE_TRANSACTION

允许用户点击端点:

POST /company/{companyName}/transactions/{id}/approvals

但是,如果只有在transaction.amount < maxAmount的情况下才能进行批准,那么将其编码为新的硬编码权限就更难了。

请注意,这些权限也可能包含在JWT令牌中,因此它们也必须可转移

设计这样一个系统的最佳方法是什么?有什么提示吗?

1 个答案:

答案 0 :(得分:1)

我可以建议你两种不同的方式:

  1. 为您的安全框架编写自定义过滤器。为/company/{companyName}/**等网址设置预身份验证过滤器,该过滤器将使用用户对当前公司的所有权限填充您的上下文或令牌。

  2. 如果您有用于提取权限的复杂逻辑(例如,用户可以查看事务还是否),则可能最好将其移至服务层并在执行主逻辑之前按需检查权限。

  3. 每个现代安全框架都支持过滤器或类似的东西,因此您应该尝试使用第一个选项。