用户RESTful安全资源

时间:2016-07-19 13:23:18

标签: api rest security spring-boot

我正在使用OAuth2构建一个SpringBoot RESTful api作为安全组件。

我想知道如何保护我的资源,但更多地考虑业务逻辑。例如,如果我有一个课程列表/rest/v1/courses,并且这些课程有一个Supervisor并且假设我记录为ROLE_SUPERVISOR(没有管理员访问权限)并且我打电话给/rest/v1/courses并且作为商业逻辑,我只能看到我担任主管的课程。

1)我应该制作/rest/v1/courses?supervisor_id=2。经典过滤器,如果我在管理员的位置,但是登录的任何人,如果跟踪网址并更改了ID,则可以看到其他数据。

2)我应该制作/rest/v1/courses并从成功登录中获取supervisor_id吗?所以我必须针对登录数据检查每个请求。 我认为这是更安全的方法,但听起来有点乏味,我可能忘记在任何控制器方法中执行安全检查。

3)也许有一个更通用的解决方案,我无法找到或想到?

谢谢,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

RESTful API是无状态的。因此,对于每个请求,您必须立即使用令牌或通过检查OAuth服务来验证请求的凭据。如果supervisor_id链接到凭据(例如,令牌值xyz暗示supervisor_id = 2),并且此ID确定访问权限,则无需将其添加为请求参数。无论如何,您总是会根据凭证验证此参数。

现在,如果"主管2"可以请求有关"主管1"的信息,然后是,您可能希望该ID作为另一个请求参数。您仍然需要检查凭据以了解"主管2"正在发出请求并验证他们可以查询的内容。

  

所以我必须针对登录数据检查每个请求。我认为这是更安全的方法,但听起来有点乏味,我可能忘记在任何控制器方法中执行安全检查。

基本上,标识请求者的任何内容都应该是您的身份验证机制的一部分,与您的特定API业务逻辑分开。您将在许多框架中找到在URL路由之前处理身份验证的工作流。这包括为您的控制器提供用户信息。