如何使用Websphere Application Server中的用户标识获取安全角色

时间:2013-08-27 06:05:03

标签: security java-ee authentication websphere jms

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

我正在使用Websphere Application Server 8.0.0.5

更新

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

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

1 个答案:

答案 0 :(得分:1)

对于servlet / EJB API,您只能检查用户是否处于某个角色,但是您无法获得已分配角色的列表。

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

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

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

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

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

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

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