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

斯科特·雷斯

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

我最近认为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(com.ibm.wps.portletservice.credentialvault.credentials.LtpaTokenCredential有用的类,但是我需要在非Portal环境中执行此操作,因此我不能使用任何特定于Portal的类或接口。

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

分数

我只是在servlet中尝试了以下内容(从此处进行修改),它可以抓取auth别名user / pwd。

import com.ibm.websphere.security.NotImplementedException;
import com.ibm.wsspi.security.auth.callback.Constants;
import com.ibm.wsspi.security.auth.callback.WSMappingCallbackHandlerFactory;
import javax.resource.spi.security.PasswordCredential;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

Map map = new HashMap();
map.put(Constants.MAPPING_ALIAS, "REPLACE_WITH_YOUR_AUTH_ALIAS");
CallbackHandler callbackHandler = null;
try {
    callbackHandler = WSMappingCallbackHandlerFactory.getInstance().getCallbackHandler(map, null);
} catch (NotImplementedException e) {
}

LoginContext loginContext = null;
try {
loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler);
    loginContext.login();
} catch (LoginException e) {
}

Subject subject = loginContext.getSubject();
Set credentials = subject.getPrivateCredentials();

PasswordCredential passwordCredential = (PasswordCredential) credentials.iterator().next();

String user = passwordCredential.getUserName();
String password = new String(passwordCredential.getPassword());

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>User: " + user + " --- Password: " + password+"</h1>");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kafka在kubernetes上使用sasl.jaas.config配置jaas

WebLogic的JAAS配置

TomEE上的JAAS配置

编辑已安装的GNOME主题(使用Ubuntu)

如何在Django频道上使用Knox令牌认证来认证Websocket连接?

使用HttpURLConnection时出现“非法状态异常:已连接”

Android-使用HttpURLConnection来发布XML数据

无需登录即可使用Java的JAAS安全性来验证用户凭证

HttpURLConnection已连接

如何通过gnome-terminal配置文件首选项->使用dconf或gsettings设置颜色来更改背景以使用内置主题?

如何判断是否已认证

绕过用户名/密码的JConsole要求-与JaMX一起使用Jaas自定义登录模块来处理授权和认证时

使用Apache Pulsar中已注册的架构发布到主题

如何使用ActiveMQ检索会话的已创建主题(和队列)

将已配置的wordpress主题/插件应用于多个网站

JAAS Realm加载内部配置文件

使用AWS Cloudformation使用SNS配置CloudTrail主题

WordPress主题已停用

AlertDialog使用什么主题来与日/夜主题自动调整颜色

我可以使用什么免费的响应式主题来构建响应式Magento主题?

配置不同的授权/认证方案

Spring security 基本认证配置

如何使用强制门户来认证从外部DHCP获取IP地址?

如何使用p来配置网络设置?

使用 JAAS 登录模块注销

使用IAsyncCollector时如何从配置中获取服务总线主题?

如何使用AdminLTE主题配置Yii2

如何使用Spring-Boot配置来配置JOOQ设置?

如何使用基于纯Java的配置来配置Spring MVC?