1 22 package org.jboss.test.security.test; 23 24 import java.util.Map ; 25 import java.util.Iterator ; 26 import java.util.Set ; 27 import java.io.InputStream ; 28 import java.io.InputStreamReader ; 29 import java.security.acl.Group ; 30 import javax.security.auth.login.Configuration ; 31 import javax.security.auth.login.AppConfigurationEntry ; 32 import javax.security.auth.login.LoginContext ; 33 import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag; 34 import javax.security.auth.Subject ; 35 36 import org.jboss.logging.Logger; 37 38 import org.jboss.logging.XLevel; 39 import org.jboss.security.auth.login.XMLLoginConfigImpl; 40 import org.jboss.security.auth.spi.Users; 41 import org.jboss.security.auth.login.LoginConfigObjectModelFactory; 42 import org.jboss.security.config.PolicyConfig; 43 import org.jboss.security.auth.login.AuthenticationInfo; 44 import org.jboss.security.auth.spi.UsersObjectModelFactory; 45 import org.jboss.security.auth.callback.UsernamePasswordHandler; 46 import org.jboss.security.config.ApplicationPolicy; 47 import org.jboss.security.SimplePrincipal; 48 import org.jboss.xb.binding.Unmarshaller; 49 import org.jboss.xb.binding.UnmarshallerFactory; 50 51 57 public class XMLLoginModulesUnitTestCase extends LoginModulesUnitTestCase 58 { 59 60 public XMLLoginModulesUnitTestCase(String name) 61 { 62 super(name); 63 } 64 65 protected void setUp() throws Exception 66 { 67 System.setProperty("users.properties", "/security/config/users.properites"); 69 System.setProperty("roles.properties", "/security/config/roles.properites"); 70 71 XMLLoginConfigImpl config = new XMLLoginConfigImpl(); 73 config.setConfigResource("security/login-config.xml"); 74 config.loadConfig(); 75 Configuration.setConfiguration(config); 76 } 77 78 public void testPropertyReplacement() throws Exception 79 { 80 Configuration config = Configuration.getConfiguration(); 81 AppConfigurationEntry [] entries = config.getAppConfigurationEntry("testPropertyReplacement"); 82 assertTrue("entries.length == 1", entries.length == 1); 83 AppConfigurationEntry entry = entries[0]; 84 LoginModuleControlFlag flag = entry.getControlFlag(); 85 assertTrue("flag == required", flag == LoginModuleControlFlag.REQUIRED); 86 Map options = entry.getOptions(); 87 String users = (String ) options.get("usersProperties"); 88 assertTrue("usersProperties(" + users + ") = /security/config/users.properites", 89 users.equals("/security/config/users.properites")); 90 String roles = (String ) options.get("rolesProperties"); 91 assertTrue("rolesProperties(" + roles + ") = /security/config/roles.properites", 92 roles.equals("/security/config/roles.properites")); 93 } 94 95 98 public void testXmlLoginModuleParsing() throws Exception 99 { 100 LoginConfigObjectModelFactory lcomf = new LoginConfigObjectModelFactory(); 101 UsersObjectModelFactory uomf = new UsersObjectModelFactory(); 102 103 InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("security/login-config2.xml"); 104 InputStreamReader xmlReader = new InputStreamReader (is); 105 Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller(); 106 unmarshaller.mapFactoryToNamespace(uomf, "http://www.jboss.org/j2ee/schemas/XMLLoginModule"); 107 PolicyConfig config = (PolicyConfig) unmarshaller.unmarshal(xmlReader, lcomf, null); 108 ApplicationPolicy aPolicy = (ApplicationPolicy)config.get("testXMLLoginModule"); 109 AuthenticationInfo info = (AuthenticationInfo)aPolicy.getAuthenticationInfo(); 110 assertTrue("test-xml-config != null", info != null); 111 AppConfigurationEntry [] entries = info.getAppConfigurationEntry(); 112 assertTrue("entries.length == 1", entries.length == 1); 113 AppConfigurationEntry ace = entries[0]; 114 assertTrue("org.jboss.security.auth.spi.XMLLoginModule", 115 ace.getLoginModuleName().equals("org.jboss.security.auth.spi.XMLLoginModule")); 116 Map options = ace.getOptions(); 117 assertTrue("Options.size == 2", options.size() == 2); 118 String guest = (String ) options.get("unauthenticatedIdentity"); 119 assertTrue("guest", guest.equals("guest")); 120 Users users = (Users) options.get("userInfo"); 121 Users.User user = users.getUser("jdukeman"); 122 String name = user.getName(); 123 assertTrue("name == jdukeman", name.equals("jdukeman")); 124 String passwrd = user.getPassword(); 125 assertTrue("passwrd == anotherduke", passwrd.equals("anotherduke")); 126 String [] roleNames = user.getRoleNames(); 127 assertTrue("roles in (Role2, Role3)", 128 roleNames[0].equals("Role2") && roleNames[1].equals("Role3")); 129 130 aPolicy = (ApplicationPolicy)config.get("testNoModuleOptions"); 131 AuthenticationInfo testNoModuleOptions = (AuthenticationInfo)aPolicy.getAuthenticationInfo(); 132 assertTrue("testNoModuleOptions != null", testNoModuleOptions != null); 134 AppConfigurationEntry [] testNoModuleOptionsEntries = testNoModuleOptions.getAppConfigurationEntry(); 135 assertTrue("entries.length == 1", testNoModuleOptionsEntries.length == 1); 136 AppConfigurationEntry testNoModuleOptionsACE = testNoModuleOptionsEntries[0]; 137 assertTrue("org.jboss.security.auth.spi.XMLLoginModule", 138 testNoModuleOptionsACE.getLoginModuleName().equals("org.jboss.security.auth.spi.XMLLoginModule")); 139 Map testNoModuleOptionsMap = testNoModuleOptionsACE.getOptions(); 140 assertTrue("testNoModuleOptionsMap.size("+testNoModuleOptionsMap+") == 0", testNoModuleOptionsMap.size() == 0); 141 } 142 143 public void testXMLLoginModule() throws Exception 144 { 145 getLog().info("testXMLLoginModule"); 146 XMLLoginConfigImpl config = new XMLLoginConfigImpl(); 148 config.setConfigResource("security/login-config2.xml"); 149 config.loadConfig(); 150 Configuration.setConfiguration(config); 151 152 AppConfigurationEntry [] entry = config.getAppConfigurationEntry("testXMLLoginModule"); 153 assertTrue("Found testXMLLoginModule", entry != null); 154 getLog().info("testXMLLoginModule options: "+entry[0].getOptions()); 155 AppConfigurationEntry [] entry2 = config.getAppConfigurationEntry("testXMLLoginModule2"); 156 assertTrue("Found testXMLLoginModule2", entry2 != null); 157 getLog().info("testXMLLoginModule2 options: "+entry2[0].getOptions()); 158 159 UsernamePasswordHandler handler = new UsernamePasswordHandler("scott", "echoman".toCharArray()); 160 LoginContext lc = new LoginContext ("testXMLLoginModule", handler); 161 lc.login(); 162 Subject subject = lc.getSubject(); 163 Set groups = subject.getPrincipals(Group .class); 164 assertTrue("Principals contains scott", subject.getPrincipals().contains(new SimplePrincipal("scott"))); 165 assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); 166 assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal"))); 167 Group roles = (Group ) groups.iterator().next(); 168 Iterator groupsIter = groups.iterator(); 169 while (groupsIter.hasNext()) 170 { 171 roles = (Group ) groupsIter.next(); 172 if (roles.getName().equals("Roles")) 173 { 174 assertTrue("Echo is a role", roles.isMember(new SimplePrincipal("Echo"))); 175 assertTrue("Java is NOT a role", roles.isMember(new SimplePrincipal("Java")) == false); 176 assertTrue("Coder is NOT a role", roles.isMember(new SimplePrincipal("Coder")) == false); 177 } 178 else if (roles.getName().equals("CallerPrincipal")) 179 { 180 getLog().info("CallerPrincipal is " + roles.members().nextElement()); 181 boolean isMember = roles.isMember(new SimplePrincipal("callerScott")); 182 assertTrue("CallerPrincipal is callerScott", isMember); 183 } 184 } 185 lc.logout(); 186 187 handler = new UsernamePasswordHandler("stark", "javaman".toCharArray()); 188 lc = new LoginContext ("testXMLLoginModule", handler); 189 lc.login(); 190 subject = lc.getSubject(); 191 groups = subject.getPrincipals(Group .class); 192 assertTrue("Principals contains stark", subject.getPrincipals().contains(new SimplePrincipal("stark"))); 193 assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); 194 assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal"))); 195 groupsIter = groups.iterator(); 196 while (groupsIter.hasNext()) 197 { 198 roles = (Group ) groupsIter.next(); 199 if (roles.getName().equals("Roles")) 200 { 201 assertTrue("Echo is NOT a role", roles.isMember(new SimplePrincipal("Echo")) == false); 202 assertTrue("Java is a role", roles.isMember(new SimplePrincipal("Java"))); 203 assertTrue("Coder is a role", roles.isMember(new SimplePrincipal("Coder"))); 204 } 205 else if (roles.getName().equals("CallerPrincipal")) 206 { 207 getLog().info("CallerPrincipal is " + roles.members().nextElement()); 208 boolean isMember = roles.isMember(new SimplePrincipal("callerStark")); 209 assertTrue("CallerPrincipal is callerStark", isMember); 210 } 211 } 212 lc.logout(); 213 214 getLog().info("Testing similar usernames"); 216 handler = new UsernamePasswordHandler("jdukeman", "anotherduke".toCharArray()); 217 lc = new LoginContext ("testXMLLoginModule", handler); 218 lc.login(); 219 subject = lc.getSubject(); 220 groups = subject.getPrincipals(Group .class); 221 assertTrue("Principals contains jdukeman", subject.getPrincipals().contains(new SimplePrincipal("jdukeman"))); 222 assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); 223 assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal"))); 224 groupsIter = groups.iterator(); 225 while (groupsIter.hasNext()) 226 { 227 roles = (Group ) groupsIter.next(); 228 if (roles.getName().equals("Roles")) 229 { 230 assertTrue("Role1 is NOT a role", roles.isMember(new SimplePrincipal("Role1")) == false); 231 assertTrue("Role2 is a role", roles.isMember(new SimplePrincipal("Role2"))); 232 assertTrue("Role3 is a role", roles.isMember(new SimplePrincipal("Role3"))); 233 } 234 else if (roles.getName().equals("CallerPrincipal")) 235 { 236 getLog().info("CallerPrincipal is " + roles.members().nextElement()); 237 boolean isMember = roles.isMember(new SimplePrincipal("callerJdukeman")); 238 assertTrue("CallerPrincipal is callerJdukeman", isMember); 239 } 240 } 241 lc.logout(); 242 243 handler = new UsernamePasswordHandler("scott2", "echoman2".toCharArray()); 244 lc = new LoginContext ("testXMLLoginModule2", handler); 245 lc.login(); 246 subject = lc.getSubject(); 247 groups = subject.getPrincipals(Group .class); 248 assertTrue("Principals contains scott2", subject.getPrincipals().contains(new SimplePrincipal("scott2"))); 249 assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); 250 assertTrue("Principals contains CallerPrincipal", groups.contains(new SimplePrincipal("CallerPrincipal"))); 251 groupsIter = groups.iterator(); 252 while (groupsIter.hasNext()) 253 { 254 roles = (Group ) groupsIter.next(); 255 if (roles.getName().equals("Roles")) 256 { 257 assertTrue("Echo2 is a role", roles.isMember(new SimplePrincipal("Echo2"))); 258 assertTrue("Java is NOT a role", roles.isMember(new SimplePrincipal("Java")) == false); 259 assertTrue("Coder is NOT a role", roles.isMember(new SimplePrincipal("Coder")) == false); 260 } 261 else if (roles.getName().equals("CallerPrincipal")) 262 { 263 getLog().info("CallerPrincipal is " + roles.members().nextElement()); 264 boolean isMember = roles.isMember(new SimplePrincipal("callerScott2")); 265 assertTrue("CallerPrincipal is callerScott2", isMember); 266 } 267 } 268 lc.logout(); 269 } 270 271 public void testRoleMapping() throws Exception 272 { 273 getLog().info("testRoleMapping"); 274 XMLLoginConfigImpl config = new XMLLoginConfigImpl(); 276 config.setConfigResource("security/login-config2.xml"); 277 config.loadConfig(); 278 Configuration.setConfiguration(config); 279 280 UsernamePasswordHandler handler = new UsernamePasswordHandler("jduke", "theduke".toCharArray()); 281 LoginContext lc = new LoginContext ("testRoleMapping", handler); 282 lc.login(); 283 Subject subject = lc.getSubject(); 284 Set groups = subject.getPrincipals(Group .class); 285 assertTrue("Principals contains jduke", subject.getPrincipals().contains(new SimplePrincipal("jduke"))); 286 assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); 287 Group roles = (Group ) groups.iterator().next(); 288 Iterator groupsIter = groups.iterator(); 289 while (groupsIter.hasNext()) 290 { 291 roles = (Group ) groupsIter.next(); 292 if (roles.getName().equals("Roles")) 293 { 294 assertTrue("Role2 is a role", roles.isMember(new SimplePrincipal("Role2"))); 295 assertTrue("Role3 is a role", roles.isMember(new SimplePrincipal("Role3"))); 296 } 297 } 298 lc.logout(); 299 300 handler = new UsernamePasswordHandler("jduke2", "theduke2".toCharArray()); 301 lc = new LoginContext ("testRoleMapping", handler); 302 lc.login(); 303 subject = lc.getSubject(); 304 groups = subject.getPrincipals(Group .class); 305 assertTrue("Principals contains jduke2", subject.getPrincipals().contains(new SimplePrincipal("jduke2"))); 306 assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); 307 roles = (Group ) groups.iterator().next(); 308 groupsIter = groups.iterator(); 309 while (groupsIter.hasNext()) 310 { 311 roles = (Group ) groupsIter.next(); 312 if (roles.getName().equals("Roles")) 313 { 314 assertTrue("Role1 is a role", roles.isMember(new SimplePrincipal("Role1"))); 315 } 316 } 317 lc.logout(); 318 319 } 320 } 321 | Popular Tags |