Author: robbie
Date: Sun Sep 2 18:26:40 2012
New Revision: 1380016
URL: http://svn.apache.org/viewvc?rev=1380016&view=rev
Log:
QPID-4253: add configuration for basic-auth on http / https management and set
to disabled / enabled respectively by default
Added:
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/BasicAuthRestTest.java
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/UserRestACLTest.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java?rev=1380016&r1=1380015&r2=1380016&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
Sun Sep 2 18:26:40 2012
@@ -255,17 +255,18 @@ public abstract class AbstractServlet ex
{
String header = request.getHeader("Authorization");
- /*
- * TODO - Should configure whether basic authentication is
allowed... and in particular whether it
- * should be allowed over non-ssl connections
- * */
-
if (header != null)
{
String[] tokens = header.split("\\s");
if(tokens.length >= 2
&& "BASIC".equalsIgnoreCase(tokens[0]))
{
+ if(!isBasicAuthSupported(request))
+ {
+ //TODO: write a return response indicating failure?
+ throw new IllegalArgumentException("BASIC
Authorization is not enabled.");
+ }
+
String[] credentials = (new
String(Base64.decodeBase64(tokens[1].getBytes()))).split(":",2);
if(credentials.length == 2)
{
@@ -299,6 +300,12 @@ public abstract class AbstractServlet ex
return subject;
}
+ private boolean isBasicAuthSupported(HttpServletRequest req)
+ {
+ return req.isSecure() ?
ApplicationRegistry.getInstance().getConfiguration().getHTTPSManagementBasicAuth()
+ :
ApplicationRegistry.getInstance().getConfiguration().getHTTPManagementBasicAuth();
+ }
+
private HttpManagementActor
getLogActorAndCacheInSession(HttpServletRequest req)
{
HttpSession session = req.getSession();
Added:
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/BasicAuthRestTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/BasicAuthRestTest.java?rev=1380016&view=auto
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/BasicAuthRestTest.java
(added)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/BasicAuthRestTest.java
Sun Sep 2 18:26:40 2012
@@ -0,0 +1,115 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.management.plugin.servlet.rest;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.configuration.ConfigurationException;
+
+public class BasicAuthRestTest extends QpidRestTestCase
+{
+ private static final String TRUSTSTORE =
"test-profiles/test_resources/ssl/java_client_truststore.jks";
+ private static final String TRUSTSTORE_PASSWORD = "password";
+ private static final String USERNAME = "admin";
+
+ @Override
+ public void setUp() throws Exception
+ {
+ setSystemProperty("javax.net.debug", "ssl");
+
+ //don't call super method, we will configure the broker in the test
before doing so
+ }
+
+ @Override
+ protected void customizeConfiguration() throws ConfigurationException,
IOException
+ {
+ //do nothing, we will configure this locally
+ }
+
+ private void configure(boolean useSsl) throws ConfigurationException,
IOException
+ {
+ getRestTestHelper().setUseSsl(useSsl);
+ setConfigurationProperty("management.http.enabled",
String.valueOf(!useSsl));
+ setConfigurationProperty("management.http.port",
Integer.toString(getRestTestHelper().getHttpPort()));
+ setConfigurationProperty("management.https.enabled",
String.valueOf(useSsl));
+ setConfigurationProperty("management.https.port",
Integer.toString(getRestTestHelper().getHttpPort()));
+ setConfigurationProperty("management.enabled", "false"); //JMX
+ }
+
+ private void verifyGetBrokerAttempt(int responseCode) throws IOException
+ {
+ HttpURLConnection conn =
getRestTestHelper().openManagementConnection("/rest/broker", "GET");
+ assertEquals(responseCode, conn.getResponseCode());
+ }
+
+ public void testDefaultEnabledWithHttps() throws Exception
+ {
+ configure(true);
+ super.setUp();
+ setSystemProperty("javax.net.ssl.trustStore", TRUSTSTORE);
+ setSystemProperty("javax.net.ssl.trustStorePassword",
TRUSTSTORE_PASSWORD);
+
+ // Try the attempt with authentication, it should succeed because
+ // BASIC auth is enabled by default on secure connections.
+ getRestTestHelper().setUsernameAndPassword(USERNAME, USERNAME);
+ verifyGetBrokerAttempt(HttpServletResponse.SC_OK);
+ }
+
+ public void testDefaultDisabledWithHttp() throws Exception
+ {
+ configure(false);
+ super.setUp();
+
+ // Try the attempt with authentication, it should fail because
+ // BASIC auth is disabled by default on non-secure connections.
+ getRestTestHelper().setUsernameAndPassword(USERNAME, USERNAME);
+ verifyGetBrokerAttempt(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ public void testEnablingForHttp() throws Exception
+ {
+ configure(false);
+ setConfigurationProperty("management.http.basic-auth", "true");
+ super.setUp();
+
+ // Try the attempt with authentication, it should succeed because
+ // BASIC auth is now enabled on non-secure connections.
+ getRestTestHelper().setUsernameAndPassword(USERNAME, USERNAME);
+ verifyGetBrokerAttempt(HttpServletResponse.SC_OK);
+ }
+
+ public void testDisablingForHttps() throws Exception
+ {
+ configure(true);
+ setConfigurationProperty("management.https.basic-auth", "false");
+ super.setUp();
+ setSystemProperty("javax.net.ssl.trustStore", TRUSTSTORE);
+ setSystemProperty("javax.net.ssl.trustStorePassword",
TRUSTSTORE_PASSWORD);
+
+ // Try the attempt with authentication, it should fail because
+ // BASIC auth is now disabled on secure connections.
+ getRestTestHelper().setUsernameAndPassword(USERNAME, USERNAME);
+ verifyGetBrokerAttempt(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+}
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java?rev=1380016&r1=1380015&r2=1380016&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
Sun Sep 2 18:26:40 2012
@@ -50,6 +50,7 @@ public class GroupRestACLTest extends Qp
{
_groupFile = createTemporaryGroupFile();
+ setConfigurationProperty("management.http.basic-auth", "true");
setConfigurationProperty("security.file-group-manager.attributes.attribute.name",
"groupFile");
setConfigurationProperty("security.file-group-manager.attributes.attribute.value",
_groupFile.getAbsolutePath());
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/UserRestACLTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/UserRestACLTest.java?rev=1380016&r1=1380015&r2=1380016&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/UserRestACLTest.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/systest/rest/acl/UserRestACLTest.java
Sun Sep 2 18:26:40 2012
@@ -50,6 +50,7 @@ public class UserRestACLTest extends Qpi
{
_groupFile = createTemporaryGroupFile();
+ setConfigurationProperty("management.http.basic-auth", "true");
setConfigurationProperty("security.file-group-manager.attributes.attribute.name",
"groupFile");
setConfigurationProperty("security.file-group-manager.attributes.attribute.value",
_groupFile.getAbsolutePath());
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=1380016&r1=1380015&r2=1380016&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
Sun Sep 2 18:26:40 2012
@@ -585,6 +585,11 @@ public class ServerConfiguration extends
return getIntValue("management.http.port",
DEFAULT_HTTP_MANAGEMENT_PORT);
}
+ public boolean getHTTPManagementBasicAuth()
+ {
+ return getBooleanValue("management.http.basic-auth", false);
+ }
+
public boolean getHTTPSManagementEnabled()
{
return getBooleanValue("management.https.enabled", false);
@@ -595,6 +600,11 @@ public class ServerConfiguration extends
return getIntValue("management.https.port",
DEFAULT_HTTPS_MANAGEMENT_PORT);
}
+ public boolean getHTTPSManagementBasicAuth()
+ {
+ return getBooleanValue("management.https.basic-auth", true);
+ }
+
public String[] getVirtualHosts()
{
return _virtualHosts.keySet().toArray(new
String[_virtualHosts.size()]);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]