如何使用Drupal保护Java REST服务?

时间:2012-03-29 22:36:20

标签: security drupal authentication rest java-ee

我正在创建一个使用Drupal 7内容管理系统的Web应用程序。网页大量使用JQuery和AJAX。

AJAX调用命中REST服务,实际上是使用JAVA实现的。 Apache正在运行Drupal 7,并配置为将任何对REST URL的调用传递给Java EE服务器(Jboss AS7)。一切都通过SSL。

我需要授权和验证对REST服务的调用,并从Java应用程序访问当前登录到Drupal的人员的用户名或ID。问题是......如何......

由于AJAX调用是针对同一个Apache服务器(而不是单独的服务器等),所以一切都发生在同一个http会话中,所以我希望这很容易。

我想到的事情:

  • 配置一个调用自定义的java安全拦截器(本地 只访问)drupal服务,以某种方式读取会话ID和 返回登录用户名
  • 创建一个“哑”drupal REST服务,作为我所有REST调用的网关,授权/验证然后在传递给Java后端服务之前注入用户名
  • https://lists.wisc.edu/read/messages?id=7777296#7777296上的文章让我想知道是否可以通过调用Drupal服务(仅在每个Java服务会话开始时)来获取Drupal sessionID并返回当前用户及其角色。我可以在我的Java服务中配置它,这样它每x秒重新执行一次这个调用,或者y调用以检查角色更改或注销。

其他人如何做到这一点?这一定是一个常见问题要解决不是吗?如果没有,你又做了什么来通过AJAX安全地访问经过身份验证的服务?除了Drupal之外,我不想引入第二个用户控制进程,除非它是不可避免的。干:)

谢谢 - 这让我难过!

1 个答案:

答案 0 :(得分:1)

看看你在做什么,并尽量让事情尽可能简单,我会选择第一个选项的变体。这基本上是当前node.js模块所做的事情,尽管它使用唯一的授权令牌。工作流程如下:

  1. 当登录用户加载页面时,会生成一个唯一的令牌并存储在Drupal数据库中并发送到浏览器
  2. 当浏览器连接到node.js服务器时,它会发送身份验证令牌以及请求
  3. node.js服务器在第一次收到带令牌的请求后,将连接到Drupal站点上的Web服务并验证令牌是否有效并发回有关用户的任何信息,以及哪些角色/等他们有。
  4. 然后,node.js服务器在内部将其存储在将来的请求中,这样就不必为每个请求ping Drupal站点。
  5. 当用户退出Drupal时,Drupal向node.js服务器发出直接请求,要求其删除该用户的令牌。
  6. 听起来像是基本上交换你的java应用程序的node.js这应该是非常可行的,其优点是,如果你将来将它拆分为多个服务器,它可以很好地扩展。