[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