基于JAX-RS / Java EE中URL参数的授权?

时间:2017-10-02 13:27:34

标签: rest security java-ee authorization jax-rs

我们正在开发基于JAX-RS的Web应用程序。我们有多个参数化端点,可以按资源ID访问 resources 并查询它们的某些方面。我们仅将对单个资源的访问权限限制为对该特定资源具有权限的用户。目前,我们通过在方法开始时以编程方式/手动检查所述访问来执行此操作。以声明/自动方式执行此操作的最佳实践是什么,甚至只是可能性?

当前的端点看起来像这样:

@GET
@Path("/resource/{resourceId}/getWhatever")
@Produces(MediaType.APPLICATION_JSON)
public String getWhatever(@PathParam("resourceId") String resourceId) throws Exception {
    checkForResourceAccess(resourceId, userName and security and whatever);
    String result = query whatever from resource;
    return result;
}

@GET
@Path("/resource/{resourceId}/getAnotherThing")
@Produces(MediaType.APPLICATION_JSON)
public String getAnotherThing(@PathParam("resourceId") String resourceId) throws Exception {
    checkForResourceAccess(resourceId, userName and security and whatever);
    String result = query another thing from resource;
    return result;
}

[...]

到目前为止,我一直在考虑这些解决方案:

  • 自定义JAAS LoginModule。没有这方面的经验,甚至不确定是否可能。
  • 专门用于检查资源访问的拦截器。但是,这不是可重用的,它与 resourceId 强烈耦合。感觉真的像黑客一样。
  • JAX-RS过滤器和拦截器,用于过滤请求。
  • 为这些端点分隔@Path(“resource / {resourceId}”)服务类。 @PathParam(“resourceId”)字段,以及@PostConstruct方法中的某种自动检查。
  • 自定义< auth-constraint>如果可能的话。

由于我们使用SAML 2.0进行单点登录身份验证,情况有些复杂。

那么,实现此授权问题的最佳实践甚至可能性是什么,同时也尽可能符合Java EE规范?

0 个答案:

没有答案