java - 使用 Jersey 进行基于用户的访问的 REST 设计

标签 java rest oauth-2.0 jersey

因此,我正在尝试了解如何设计 REST 资源以及安全性如何融入这一切。我对 REST 和用户身份验证不太熟悉,所以请耐心等待 - 我确信这是一个非常愚蠢的问题。

现在我知道您可以为用户定义安全角色,并根据他们是否是管理员来限制对资源的访问。

令我感到困惑的是,我遇到了这样一种情况:某个用户(例如 1234)拥有订阅列表。现在只有用户 1234 应该能够访问他的订阅。

GET /user_id/1234/subscriptions

在这种情况下,使用角色没有任何意义,因为您必须为每个用户定义角色。我们是否必须通过在代码中进行某种检查来控制此访问权限,以确保该用户具有访问权限?例如:

@Path("/user_id/{user_id}/subscriptions")
@GET
public getSubscriptions(@PathParam("user_id" int user_id))
{
    if(user_id == "some code here that checks what the user_id of the current user is")
    {
        return Response.ok(getUserSubscriptionsFromDB(user_id));
    }
    else
    {
        return Response.status(Status.UNAUTHORIZED).build();
    }
}

这是应该如何完成的,还是我搞错了?如果这就是您的做法,那么“”中的实际代码会是什么样子?我要询问什么对象才能获得 user_id? [计划将来使用 OAUTH2 社交登录用于 google、facebook 等...但我也可能只使用基本身份验证]

最佳答案

你基本上是对的。此类授权的术语是基于权限/Activity 的授权,广泛用于对 RESTful 服务等资源的 CRUD 操作。

伪代码更像是这样的:

@Path("/users/{userId}/subscriptions")
@GET
public getSubscriptions(@PathParam("userId" int userId))
{
    if(getSubject().isPermitted("subscriptions:read:"+userId)
    {
        return Response.ok(getUserSubscriptionsFromDB(userId));
    }
    else
    {
        return Response.status(Status.UNAUTHORIZED).build();
    }
}

您可能想查看Apache Shiro它具有相当不错的基于权限的授权支持。

您可能还想了解命名 REST resources 的最佳实践。 .

关于java - 使用 Jersey 进行基于用户的访问的 REST 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324671/

相关文章:

java - 将 JAX-RS 1.1 升级到 JAX-RS 2.0 需要有关 web.xml 部署的帮助

java - 需要在 Jersey REST 服务中使用 SQLiteOpenHelper 但我无法传递所需的 Android 上下文

javascript - 如何在 cordova 应用程序中使用 Watson Text2Speech REST API?

javascript - OAuth2认证js客户端

oauth-2.0 - 当需要电子邮件属性但 Facebook 不提供时,用户如何通过 Facebook 注册 Cognio 用户池?

Java 检测 jtree 上的 CTRL+X 组合键

java - 用于聊天应用程序的 Google App Engine 和 Android 中的 XMPP

java - Apache POI : Cannot change cell value

google-apps-script - 适用于多个用户的 Google Script OAuth

java - 将字符串的第二个索引与数组字符串中下一个字符串的第二个索引进行比较