【问题标题】:Authentication and Authorization on a simple restful webservice一个简单的 RESTful Web 服务上的身份验证和授权
【发布时间】:2016-03-30 01:41:24
【问题描述】:

我使用maven在eclipse中开发了一个基本的Restful Webservice。我使用 tomcat 7.0 作为服务器,使用 SE 1.7 和 jersey 作为我的 JAX-RS 源,但我不使用 JPA。我有一个 MySql 数据库,我使用 MySql 提供的连接器 J 连接到数据库。我的数据库中有一个员工表和一个部门表,以及这些表的合适模型类。我的网络服务仅提供以 JSON 格式返回员工和部门信息的 get-methods。

它工作得很好,但现在我希望客户端在访问 webservice-methods 之前先登录。

客户端没有设置jet,但应该是网站,在我的tomcat服务器上,使用javascript和JQuery与webservice交互。

现在我想向我的 web 服务添加身份验证和授权服务。这应该检查用户是否已登录并有权询问已定义的员工或部门。例如,我的一种获取方法是:

@GET
@Path("/employee/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Employee getEmployee(@PathParam("id") long id) {
    return EmployeeDBService.getDefinedEmployee(id);
}

现在客户端使用 serverurl/myresource/employee/10 调用它 但是登录客户端的用户没有权限要求id为10的员工。

我还想添加一个功能,在一段时间不活动后注销客户端。

我已经找了一个很好的教程和技术来实现对webservice的认证和授权服务。但我并没有真正成功,因为:

  • 我是开发 Java RESTful Web 服务的新手。
  • 我只找到了在 SOAP Web 服务中实现的示例,并且从未阅读过关于在一段时间处于非活动状态后自动注销的内容。

你们中有人知道如何解决我的问题的好链接/示例/技术吗?

如果有任何问题,我会回答他们。感谢您的帮助和时间!

【问题讨论】:

  • 请求站外资源是题外话。我会坚持询问如何实现您需要实现的目标,而不是询问链接/工具/代码。请注意,如果您寻找简单的答案,这不是一个简单的话题 - 没有。安全性当然是技术栈的标准部分,因为它是泽西岛,它有一个很好的用户手册和一个很好的安全章节。 jersey.java.net/documentation/latest/security.html 。但是该章确实假设您了解 JavaEE 安全性的来龙去脉。 (编辑:对不起,你确实提到了泽西岛)
  • " 请注意,这不是一个简单的话题,如果您寻找简单的答案 - 没有。安全性当然是技术堆栈的标准部分" 这正是我的问题。几天以来,我一直在学习如何开发一个宁静的网络服务,但我没有找到结合我真正需要的知识来解决给定问题的资源。这一切都是我必须在大约 2 个月内提交的项目的一部分,我不想在上周做所有事情........但是我寻找一个非常好的来源仍然没有成功.我一年前才学Java……不过谢谢你的帮助。

标签: java authorization restful-authentication


【解决方案1】:

正如评论,security chapter in the Jersey documentation 将向您展示如何在您的 REST API 中集成身份验证机制:这部分身份验证将仅检查用户是否已登录以及他是谁。

登录客户端的用户无权查询id为10的员工

JAX/RS 对您的数据模型及其权限一无所知。但他会给你它的登录名。您必须自己实现逻辑。这可能是每个 REST 方法的第一行。

【讨论】:

  • 这意味着,例如我连接到我的数据库,我在其中保存了用户名、密码和他们的权限,并在重新发送之前检查登录的用户,我知道,是否有权进行该调用?
  • 没错。或者:SecurityContext 还可以为您提供哪些是用户的角色(SecurityContext.isUserInRole)。如果员工人数较少,您可以为每个员工使用一个角色。
  • 好的,感谢您的帮助 Emmanuel Keller,我想这应该对我有所帮助。
  • 查看 XACML 或 Apache Shiro 或 Spring 安全性的授权(访问控制)部分
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2012-06-19
  • 2016-02-20
  • 1970-01-01
  • 2020-11-13
  • 2020-08-07
相关资源
最近更新 更多