在完整版的Websphere中,您可以定义JAAS身份验证条目。 这些条目具有唯一的ID,用户名和密码。通常这些绑定到WAS中的其他配置条目,例如DataSource配置。
但有时您需要通过API直接从应用程序代码访问J2C记录。 这里有几篇帖子解释了如何在WAS中做到这一点。 通常你做的是:
LoginContext loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler);
loginContext.login();
它确实通过JCA API在WAS中起作用,但在Websphere Liberty Profile中却没有。 有没有办法在Websphere Liberty Profile中访问J2C AuthData? 为此目的在server.xml中设置J2C所需的最低配置是什么?
我们有类似的东西:
<featureManager>
<feature>appSecurity-2.0</feature>
</featureManager>
<authData id="someAppCredentials" user="someUser" password="some Password"/>
<jaasLoginContextEntry id="DefaultPrincipalMapping" name="DefaultPrincipalMapping" loginModuleRef="userNameAndPassword"/>
但是由于WLP抛出,显然还不够:javax.security.auth.login.LoginException:没有为DefaultPrincipalMapping配置LoginModule 如果你尝试做loginContext.login()。
答案 0 :(得分:0)
目前,Liberty配置文件中不支持DefaultPrincipalMapping。应用程序没有API可以调用并获取此信息。这可以在将来的版本中考虑。
答案 1 :(得分:0)
从8.5.5.9版开始,似乎已添加此功能。
有关详细信息,请参阅:Developing a programmatic login for obtaining authentication data
您需要server.xml
中的以下功能:
<featureManager>
<feature>appSecurity-2.0</feature>
<feature>passwordUtilities-1.0</feature>
<feature>jca-1.7</feature>
</featureManager>
然后定义你的别名:
<authData id="myAuthData" user="myUser" password="myPassword"/> <!-- password can also be encoded -->
然后在代码中访问它:
HashMap map = new HashMap();
map.put(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS, "myAuthData"); // Replace value with your alias.
CallbackHandler callbackHandler = new com.ibm.wsspi.security.auth.callback.WSMappingCallbackHandler(map, null);
LoginContext loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler);
loginContext.login();
Subject subject = loginContext.getSubject();
Set<javax.resource.spi.security.PasswordCredential> creds = subject.getPrivateCredentials(javax.resource.spi.security.PasswordCredential.class);
PasswordCredential passwordCredential = creds.iterator().next();
String userName = passwordCredential.getUserName();
char[] password = passwordCredential.getPassword();
// Do something with the userName and password.