1

我的应用程序由服务器 A 托管,另一个应用程序由服务器 B 托管。“另一个应用程序”有时会向我的应用程序发布请求,并且在请求标头中,我可以获取用户 ID。我是否可以通过“其他应用程序”发布的此用户 ID 获取用户安全角色。来自服务器 B 的所有请求都是可信的。

我正在使用 Websphere 应用程序服务器 8.0.0.5

更新

让我重新表述一下这个场景,这次不使用“服务器”。有 A、B、C 应用程序。当来自“用户”的特定用户请求转到 A 时,A 会向 B 发布 JMS 事件,然后 B 向 C 发送请求。C 是我的应用程序,B 是我上面提到的“另一个应用程序”。因此,从 B 到 C 的请求不是经过身份验证的请求(无法从请求实例中获取主体)。如果用户的 ID,我可以从请求标头中获得所有信息。

  1. 我无法使用isUserInRole方法
  2. 该角色由 WebSphere 管理
4

1 回答 1

1

至于 servlet/EJB API,您只能检查用户是否属于某个角色,而无法获取已分配角色的列表。

如果您在请求标头中获得的用户已通过服务器 A 的身份验证,您可以HttpServletRequest.isUserInRole针对已知角色名称列表进行调用。

在您的情况下,用户可能未经过服务器 A 的身份验证(因为存在信任),因此这是不可能的 - 没有官方 API。我不知道 WebSphere 特定的 API。

选项(所有这些都只适用,如果真的有信任的话)

  1. 服务器 B 也可以在请求标头中传递角色
  2. 在服务器 B 上实现 EJB/web 服务等,以便服务器 A 可以查询给定用户的角色
  3. 如果角色由外部系统(LDAP 等)管理,您可以从该系统获取角色

更新(考虑改变场景的评论)

  • B 也可以将调用用户的角色放入消息属性中。

  • B 可以在 C 上进行身份验证(C 需要来自 B 的身份验证)

  • 如果您不能这样做,并且您既不能从 WebSphere 或任何其他外部系统(例如 LDAP)获得该角色,那么我不知道还有另一种可能性。

于 2013-08-27T18:48:32.313 回答