Author: kwall
Date: Fri Feb 12 13:49:38 2016
New Revision: 1730025

URL: http://svn.apache.org/viewvc?rev=1730025&view=rev
Log:
QPID-7028: [Java Broker] OAuth2 - Report failure to authorise the user with 403

Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2UserPrincipal.java
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/auth/OAuth2InteractiveAuthenticator.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=1730025&r1=1730024&r2=1730025&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
 Fri Feb 12 13:49:38 2016
@@ -304,7 +304,7 @@ public class SecurityManager
             }
         }))
         {
-            throw new AccessControlException("User not authorised for 
management");
+            throw new AccessControlException("User is not authorised for 
management");
         }
     }
 

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2UserPrincipal.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2UserPrincipal.java?rev=1730025&r1=1730024&r2=1730025&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2UserPrincipal.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/oauth2/OAuth2UserPrincipal.java
 Fri Feb 12 13:49:38 2016
@@ -82,4 +82,10 @@ public class OAuth2UserPrincipal impleme
         result = 31 * result + _name.hashCode();
         return result;
     }
+
+    @Override
+    public String toString()
+    {
+        return getName();
+    }
 }

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/auth/OAuth2InteractiveAuthenticator.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/auth/OAuth2InteractiveAuthenticator.java?rev=1730025&r1=1730024&r2=1730025&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/auth/OAuth2InteractiveAuthenticator.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/auth/OAuth2InteractiveAuthenticator.java
 Fri Feb 12 13:49:38 2016
@@ -22,6 +22,7 @@ package org.apache.qpid.server.managemen
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.security.AccessControlException;
 import java.security.SecureRandom;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -159,13 +160,23 @@ public class OAuth2InteractiveAuthentica
                     public void handleAuthentication(final HttpServletResponse 
response) throws IOException
                     {
                         AuthenticationResult authenticationResult = 
oauth2Provider.authenticateViaAuthorizationCode(authorizationCode, redirectUri);
-                        createSubject(authenticationResult);
+                        try
+                        {
+                            Subject subject = 
createSubject(authenticationResult);
+                            authoriseManagement(subject);
+                            
HttpManagementUtil.saveAuthorisedSubject(httpSession, subject);
 
-                        LOGGER.debug("Successful login. Redirect to original 
resource {}", originalRequestUri);
-                        response.sendRedirect(originalRequestUri);
+                            LOGGER.debug("Successful login. Redirect to 
original resource {}", originalRequestUri);
+                            response.sendRedirect(originalRequestUri);
+                        }
+                        catch (AccessControlException e)
+                        {
+                            LOGGER.info("User '{}' is not authorised for 
management", authenticationResult.getMainPrincipal());
+                            response.sendError(403, "User is not authorised 
for management");
+                        }
                     }
 
-                    private void createSubject(final AuthenticationResult 
authenticationResult)
+                    private Subject createSubject(final AuthenticationResult 
authenticationResult)
                     {
                         SubjectCreator subjectCreator = 
oauth2Provider.getSubjectCreator(request.isSecure());
                         SubjectAuthenticationResult result = 
subjectCreator.createResultWithGroups(authenticationResult);
@@ -184,11 +195,13 @@ public class OAuth2InteractiveAuthentica
                                               
original.getPrivateCredentials());
                         subject.getPrincipals().add(new 
ServletConnectionPrincipal(request));
                         subject.setReadOnly();
+                        return subject;
+                    }
 
+                    private void authoriseManagement(final Subject subject)
+                    {
                         Broker broker = (Broker) 
oauth2Provider.getParent(Broker.class);
                         
HttpManagementUtil.assertManagementAccess(broker.getSecurityManager(), subject);
-
-                        HttpManagementUtil.saveAuthorisedSubject(httpSession, 
subject);
                     }
                 };
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to