使用配置的JAAS主题来验证HttpURLConnection?

时间:2017-08-11 08:03:35

标签: java authentication servlets websphere jaas

过去几次,我必须在WebSphere Application Server上运行的应用程序中建立经过身份验证的HTTP或HTTPS连接。 我通常会为连接创建一些自定义方式来存储用户名和密码 - 使用文本或XML文件,或者进行测试,只需硬编码 - 并将这些详细信息添加到HttpURLConnection中的Authorization标头中,以执行HTTP基本身份验证。

我最近认为WAS集成解决方案控制台有一种配置用户名和密码的方法(在安全性 - > Java身份验证和授权服务 - > J2C身份验证数据下),并且使用内置功能(如果可能的话),而不是总是以自定义方式执行此操作,但我在一小时左右的搜索后无法弄清楚如何执行此操作。

那么,有没有人知道它是否可能,如果是这样,如何使用配置的WAS J2C身份验证数据来验证任意HTTP或HTTPS连接?

我认为它需要WebSphere API:

  • 通过别名检索表示J2C身份验证条目的对象;和
  • 做其中一个:
    • 从JAAS / J2C对象获取经过身份验证的HttpURLConnection或HttpsURLConnection对象;
    • 获取纯文本用户名和密码,以便将其添加到Authorization标头中;或
    • 如果连接到同一域中的IBM平台:从JAAS / J2C对象获取LTPA令牌,然后可以将其添加到连接中的cookie中。

另外:如果Apache HttpClient会使这更容易,我可以使用它,但仍然需要适当的WebSphere API。

我找到了一个可能对WebSphere Portal(from collections import OrderedDict unordered_dict = { 3: {'you', 'see', 'way', 'and', 'the'}, 6: {'become', 'people'}, 2: {'is'}, 5: {'treat'}, 4: {'what', 'them', 'they'}} ordered_dict = OrderedDict() for key in sorted(unordered_dict.keys()): ordered_dict[key] = unordered_dict[key] )有用的类,但我需要在非Portal环境中执行此操作,因此我无法使用任何特定于Portal的类或接口

我还需要它至少在以下类型的应用程序中工作:Servlet和WebSphere Trust Association Interceptor。

1 个答案:

答案 0 :(得分:0)

如果身份验证是在WAS服务器之间进行的,那么您就不需要这些长度;只要参与的WAS服务器构成相同安全域的一部分并相互信任,LTPA令牌就足够了。

如果您的想法是从非WAS服务器转到WAS服务器,您可以查看TAI选项,但您仍然不需要使用身份验证别名。

当我们从一个服务到下游服务进行身份验证时,我们只是传入了LTPA令牌,如下所示(LTPA令牌不是Portal的东西,它是一个无用的东西)。假设有人已在您的服务上进行了身份验证,例如从Portal或WAS登录,我们想在另一个WAS服务器上调用下游REST服务。

/** For call to a REST client, use apache wink that comes with WAS:
* This method shows how to pass in the available LTPA token to create
* a RestClient
private org.apache.wink.client.RestClient getRestClient() {
  if (restClient == null) {
    org.apache.wink.client.ClientConfig config = new ClientConfig();    
    config.handlers(new org.apache.wink.client.handlers.LtpaAuthSecurityHandler());
    restClient = new RestClient(config);
  }
  return restClient;
}