[jboss-cvs] Picketbox SVN: r264 - in trunk: security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Sep 28 15:31:28 EDT 2011
Author: sguilhen at redhat.com
Date: 2011-09-28 15:31:27 -0400 (Wed, 28 Sep 2011)
New Revision: 264
Modified:
trunk/
trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossAuthConfigFactory.java
trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java
trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/auth/JASPIServerAuthenticationManager.java
trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/jaspi/JASPIServerAuthenticationManagerUnitTestCase.java
trunk/security-spi/spi/src/main/java/org/jboss/security/ServerAuthenticationManager.java
Log:
Fixes for the JASPI implementation as required by the TCK JASPI tests
Property changes on: trunk
___________________________________________________________________
Modified: svn:ignore
- .metadata
+ .project
.settings
Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossAuthConfigFactory.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossAuthConfigFactory.java 2011-09-28 18:42:08 UTC (rev 263)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossAuthConfigFactory.java 2011-09-28 19:31:27 UTC (rev 264)
@@ -83,8 +83,8 @@
Map<String, Object> props = new HashMap<String, Object>();
JBossAuthConfigProvider provider = new JBossAuthConfigProvider(props, null);
// register a few default providers for the layers
- this.registerConfigProvider(provider, "HTTP", " ", "Default Provider");
- this.registerConfigProvider(provider, "HttpServlet", " ", "Default Provider");
+ this.registerConfigProvider(provider, "HTTP", null, "Default Provider");
+ this.registerConfigProvider(provider, "HttpServlet", null, "Default Provider");
}
/*
@@ -98,10 +98,10 @@
throw new IllegalArgumentException("listener is null");
String[] arr = new String[0];
- String input = (layer + "_" + appContext).toUpperCase();
- String allLayer = ("NULL" + "_" + appContext).toUpperCase();
- String allContext = (layer + "_" + "NULL").toUpperCase();
- String general = "NULL" + "_" + "NULL";
+ String input = layer + "^" + appContext;
+ String allLayer = "null" + "^" + appContext;
+ String allContext = layer + "^" + "null";
+ String general = "null" + "^" + "null";
RegistrationListener origListener = null;
String key = null;
@@ -141,15 +141,14 @@
{
if (appContext == null)
appContext = " ";
- String input = (layer + "_" + appContext).toUpperCase();
- String allLayer = ("NULL" + "_" + appContext).toUpperCase();
- String allContext = (layer + "_" + "NULL").toUpperCase();
- String general = "NULL" + "_" + "NULL";
- String blank = (layer + "_" + " ").toUpperCase();
+ String input = layer + "^" + appContext;
+ String allLayer = "null" + "^" + appContext;
+ String allContext = layer + "^" + "null";
+ String general = "null" + "^" + "null";
AuthConfigProvider acp = null;
String key = null;
- for (int i = 0; i < 5 && acp == null; i++)
+ for (int i = 0; i < 4 && acp == null; i++)
{
if (i == 0)
key = input;
@@ -159,8 +158,6 @@
key = allContext;
if (i == 3)
key = general;
- if (i == 4)
- key = blank;
acp = (AuthConfigProvider) keyProviderMap.get(key);
}
@@ -176,19 +173,20 @@
*/
public RegistrationContext getRegistrationContext(String registrationID)
{
- final String description = (String) idToDescriptionMap.get(registrationID);
String key = (String) idKeyMap.get(registrationID);
- StringTokenizer st = new StringTokenizer(key, "_");
+ StringTokenizer st = new StringTokenizer(key, "^");
if (st.countTokens() < 2)
throw new IllegalStateException("Invalid key obtained=" + key);
+
final String layer = st.nextToken();
final String appCtx = st.nextToken();
+ final String description = (String) idToDescriptionMap.get(registrationID);
return new RegistrationContext()
{
public String getAppContext()
{
- return appCtx.equals("NULL") ? null : appCtx;
+ return appCtx.equals("null") ? null : appCtx;
}
public String getDescription()
@@ -198,7 +196,7 @@
public String getMessageLayer()
{
- return layer.equals("NULL") ? null : layer;
+ return layer.equals("null") ? null : layer;
}
public boolean isPersistent()
@@ -217,7 +215,7 @@
List<String> al = new ArrayList<String>();
if (provider == null)
{
- al.addAll(idToDescriptionMap.keySet());
+ al.addAll(idKeyMap.keySet());
}
else
{
@@ -276,9 +274,9 @@
throw new IllegalArgumentException("provider is null");
StringBuilder key = new StringBuilder();
- key.append(layer == null ? "NULL" : layer.toUpperCase());
- key.append("_");
- key.append(appContext == null ? "NULL" : appContext.toUpperCase());
+ key.append(layer == null ? "null" : layer);
+ key.append("^");
+ key.append(appContext == null ? "null" : appContext);
String keystr = key.toString();
keyProviderMap.put(keystr, provider);
@@ -287,12 +285,12 @@
UUID guid = UUID.randomUUID();
String providerID = guid.toString();
this.idKeyMap.put(providerID, keystr);
+
List<String> list = this.providerToIDListMap.get(provider);
if (list == null)
- {
list = new ArrayList<String>();
- }
list.add(providerID);
+
this.providerToIDListMap.put(provider, list);
if (description != null)
this.idToDescriptionMap.put(providerID, description);
Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java 2011-09-28 18:42:08 UTC (rev 263)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java 2011-09-28 19:31:27 UTC (rev 264)
@@ -96,9 +96,17 @@
Map<String,Map> mapOptionsByName = new HashMap<String,Map>();
SecurityContext securityContext = SecurityActions.getSecurityContext();
- if(securityContext == null)
- throw new IllegalStateException("Security Context is null");
- String secDomain = securityContext.getSecurityDomain();
+ String secDomain = null;
+ if (securityContext != null)
+ {
+ secDomain = securityContext.getSecurityDomain();
+ }
+ else{
+ secDomain = (String) properties.get("security-domain");
+ if(secDomain == null)
+ throw new IllegalStateException("Unable to obtain security domain from " +
+ "configuration or security context");
+ }
String defaultAppDomain = SecurityConstants.DEFAULT_APPLICATION_POLICY;
//Get the modules from the SecurityConfiguration
Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/auth/JASPIServerAuthenticationManager.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/auth/JASPIServerAuthenticationManager.java 2011-09-28 18:42:08 UTC (rev 263)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/plugins/auth/JASPIServerAuthenticationManager.java 2011-09-28 19:31:27 UTC (rev 264)
@@ -21,7 +21,7 @@
*/
package org.jboss.security.plugins.auth;
-import java.util.HashMap;
+import java.util.Properties;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
@@ -53,30 +53,43 @@
super(securityDomain, handler);
}
- /**
- * @see AuthenticationManager#isValid(MessageInfo, Subject, String, CallbackHandler)
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.security.ServerAuthenticationManager#isValid(javax.security.auth.message.MessageInfo, javax.security.auth.Subject, java.lang.String, javax.security.auth.callback.CallbackHandler)
*/
- @SuppressWarnings({"rawtypes"})
public boolean isValid(MessageInfo requestMessage,Subject clientSubject, String layer,
CallbackHandler handler)
- {
+ {
+ return this.isValid(requestMessage, clientSubject, layer, PolicyContext.getContextID(), handler);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.security.ServerAuthenticationManager#isValid(javax.security.auth.message.MessageInfo, javax.security.auth.Subject, java.lang.String, java.lang.String, javax.security.auth.callback.CallbackHandler)
+ */
+ public boolean isValid(MessageInfo messageInfo, Subject clientSubject, String layer, String appContext,
+ CallbackHandler callbackHandler)
+ {
AuthStatus status = AuthStatus.FAILURE;
try
{
- String contextID = PolicyContext.getContextID();
AuthConfigFactory factory = AuthConfigFactory.getFactory();
- AuthConfigProvider provider = factory.getConfigProvider(layer,contextID,null);
+ AuthConfigProvider provider = factory.getConfigProvider(layer,appContext,null);
if(provider == null)
- throw new IllegalStateException("Provider is null for "+ layer + " for "+ contextID);
+ throw new IllegalStateException("Provider is null for "+ layer + " for "+ appContext);
+
+ ServerAuthConfig serverConfig = provider.getServerAuthConfig(layer,appContext,callbackHandler);
+ String authContextId = serverConfig.getAuthContextID(messageInfo);
- ServerAuthConfig serverConfig = provider.getServerAuthConfig(layer,contextID,handler);
- ServerAuthContext sctx = serverConfig.getAuthContext(contextID,
- new Subject(), new HashMap());
+ Properties properties = new Properties();
+ properties.setProperty("security-domain", super.getSecurityDomain());
+ ServerAuthContext sctx = serverConfig.getAuthContext(authContextId, new Subject(), properties);
+
if(clientSubject == null)
clientSubject = new Subject();
Subject serviceSubject = new Subject();
- status = sctx.validateRequest(requestMessage, clientSubject, serviceSubject);
+ status = sctx.validateRequest(messageInfo, clientSubject, serviceSubject);
//TODO: Add caching
}
catch(AuthException ae)
@@ -87,4 +100,35 @@
return AuthStatus.SUCCESS == status ;
}
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.security.ServerAuthenticationManager#secureResponse(javax.security.auth.message.MessageInfo, javax.security.auth.Subject, java.lang.String, java.lang.String, javax.security.auth.callback.CallbackHandler)
+ */
+ public void secureResponse(MessageInfo messageInfo, Subject serviceSubject, String layer, String appContext,
+ CallbackHandler handler)
+ {
+ try
+ {
+ AuthConfigFactory factory = AuthConfigFactory.getFactory();
+ AuthConfigProvider provider = factory.getConfigProvider(layer, appContext, null);
+ if(provider == null)
+ throw new IllegalStateException("Provider is null for "+ layer + " for "+ appContext);
+
+ ServerAuthConfig serverConfig = provider.getServerAuthConfig(layer, appContext, handler);
+ String authContextId = serverConfig.getAuthContextID(messageInfo);
+
+ Properties properties = new Properties();
+ properties.setProperty("security-domain", super.getSecurityDomain());
+ if (serviceSubject == null)
+ serviceSubject = new Subject();
+ ServerAuthContext sctx = serverConfig.getAuthContext(authContextId, serviceSubject, properties);
+ sctx.secureResponse(messageInfo, serviceSubject);
+ }
+ catch(AuthException ae)
+ {
+ if(trace)
+ log.trace("AuthException:",ae);
+ }
+ }
+
}
\ No newline at end of file
Modified: trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/jaspi/JASPIServerAuthenticationManagerUnitTestCase.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/jaspi/JASPIServerAuthenticationManagerUnitTestCase.java 2011-09-28 18:42:08 UTC (rev 263)
+++ trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/jaspi/JASPIServerAuthenticationManagerUnitTestCase.java 2011-09-28 19:31:27 UTC (rev 264)
@@ -33,6 +33,7 @@
import org.jboss.security.SecurityContext;
import org.jboss.security.SecurityContextAssociation;
import org.jboss.security.auth.callback.AppCallbackHandler;
+import org.jboss.security.auth.callback.JBossCallbackHandler;
import org.jboss.security.auth.login.XMLLoginConfigImpl;
import org.jboss.security.auth.message.GenericMessageInfo;
import org.jboss.security.auth.message.config.JBossAuthConfigProvider;
@@ -56,6 +57,8 @@
String configFile = "config/jaspi-config.xml";
+ JASPIServerAuthenticationManager jaspiManager;
+
@SuppressWarnings("unchecked")
protected void setUp() throws Exception
{
@@ -63,8 +66,9 @@
factory.registerConfigProvider(new JBossAuthConfigProvider(new HashMap(), null), layer, appId,
"Test Config Provider");
- SecurityContext jsc = new JBossSecurityContext("conf-jaspi");
- SecurityContextAssociation.setSecurityContext(jsc);
+ jaspiManager = new JASPIServerAuthenticationManager("conf-jaspi", new JBossCallbackHandler());
+// SecurityContext jsc = new JBossSecurityContext("conf-jaspi");
+// SecurityContextAssociation.setSecurityContext(jsc);
XMLLoginConfigImpl xli = XMLLoginConfigImpl.getInstance();
SecurityActions.setJAASConfiguration(xli);
@@ -80,7 +84,6 @@
{
CallbackHandler cbh = new AppCallbackHandler("anil", "anilpwd".toCharArray());
MessageInfo messageInfo = new GenericMessageInfo(new Object(), new Object());
- JASPIServerAuthenticationManager jaspiManager = new JASPIServerAuthenticationManager();
boolean valid = jaspiManager.isValid(messageInfo, new Subject(), layer, cbh);
assertTrue(valid);
}
@@ -89,7 +92,6 @@
{
CallbackHandler cbh = new AppCallbackHandler("anil", "dead".toCharArray());
MessageInfo messageInfo = new GenericMessageInfo(new Object(), new Object());
- JASPIServerAuthenticationManager jaspiManager = new JASPIServerAuthenticationManager();
boolean valid = jaspiManager.isValid(messageInfo, new Subject(), layer, cbh);
assertFalse(valid);
}
Modified: trunk/security-spi/spi/src/main/java/org/jboss/security/ServerAuthenticationManager.java
===================================================================
--- trunk/security-spi/spi/src/main/java/org/jboss/security/ServerAuthenticationManager.java 2011-09-28 18:42:08 UTC (rev 263)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/ServerAuthenticationManager.java 2011-09-28 19:31:27 UTC (rev 264)
@@ -42,4 +42,32 @@
*/
boolean isValid(MessageInfo requestMessage, Subject clientSubject, String layer,
CallbackHandler callbackHandler);
+
+ /**
+ * Authenticate a Subject given the request response JSR-196(JASPI) messages
+ *
+ * @param messageInfo the object that contains the request and response messages.
+ * @param clientSubject the client subject.
+ * @param layer the message layer for JASPI.
+ * @param appContext the JASPI application context.
+ * @param callbackHandler the callback handler instance.
+ * @return {@code true} if the client subject is valid; {@code false} otherwise.
+ */
+ boolean isValid(MessageInfo messageInfo, Subject clientSubject, String layer, String appContext,
+ CallbackHandler callbackHandler);
+
+ /**
+ * <p>
+ * Secures the response encapsulated in the specified {@code MessageInfo} object.
+ * </p>
+ *
+ * @param messageInfo the object that contains the request and response messages.
+ * @param serviceSubject an optional server {@code Subject} instance.
+ * @param layer the JASPI message layer.
+ * @param appContext the JASPI application context.
+ * @param callbackHandler the {@code CallbackHandler} instance that can be used to obtain further information
+ * (such as keys) to secure the response message.
+ */
+ void secureResponse(MessageInfo messageInfo, Subject serviceSubject, String layer, String appContext,
+ CallbackHandler callbackHandler);
}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list