X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fsecurity%2Fauthentication%2FSpnegoAuthenticator.java;fp=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fsecurity%2Fauthentication%2FSpnegoAuthenticator.java;h=8469c0a800d2bdb9ba8aba20a244b25664299ad3;hp=0000000000000000000000000000000000000000;hb=73ef54a38e3930a1a789cdc6b5fa23cdd4c9d086;hpb=515007c7c1351045420669d65b59c08fa46850f2 diff --git a/lib/jetty/org/eclipse/jetty/security/authentication/SpnegoAuthenticator.java b/lib/jetty/org/eclipse/jetty/security/authentication/SpnegoAuthenticator.java new file mode 100644 index 00000000..8469c0a8 --- /dev/null +++ b/lib/jetty/org/eclipse/jetty/security/authentication/SpnegoAuthenticator.java @@ -0,0 +1,116 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.security.authentication; + +import java.io.IOException; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.security.ServerAuthException; +import org.eclipse.jetty.security.UserAuthentication; +import org.eclipse.jetty.server.Authentication; +import org.eclipse.jetty.server.Authentication.User; +import org.eclipse.jetty.server.UserIdentity; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; +import org.eclipse.jetty.util.security.Constraint; + +public class SpnegoAuthenticator extends LoginAuthenticator +{ + private static final Logger LOG = Log.getLogger(SpnegoAuthenticator.class); + private String _authMethod = Constraint.__SPNEGO_AUTH; + + public SpnegoAuthenticator() + { + } + + /** + * Allow for a custom authMethod value to be set for instances where SPENGO may not be appropriate + * @param authMethod + */ + public SpnegoAuthenticator( String authMethod ) + { + _authMethod = authMethod; + } + + @Override + public String getAuthMethod() + { + return _authMethod; + } + + @Override + public Authentication validateRequest(ServletRequest request, ServletResponse response, boolean mandatory) throws ServerAuthException + { + HttpServletRequest req = (HttpServletRequest)request; + HttpServletResponse res = (HttpServletResponse)response; + + String header = req.getHeader(HttpHeader.AUTHORIZATION.asString()); + + if (!mandatory) + { + return new DeferredAuthentication(this); + } + + // check to see if we have authorization headers required to continue + if ( header == null ) + { + try + { + if (DeferredAuthentication.isDeferred(res)) + { + return Authentication.UNAUTHENTICATED; + } + + LOG.debug("SpengoAuthenticator: sending challenge"); + res.setHeader(HttpHeader.WWW_AUTHENTICATE.asString(), HttpHeader.NEGOTIATE.asString()); + res.sendError(HttpServletResponse.SC_UNAUTHORIZED); + return Authentication.SEND_CONTINUE; + } + catch (IOException ioe) + { + throw new ServerAuthException(ioe); + } + } + else if (header != null && header.startsWith(HttpHeader.NEGOTIATE.asString())) + { + String spnegoToken = header.substring(10); + + UserIdentity user = login(null,spnegoToken, request); + + if ( user != null ) + { + return new UserAuthentication(getAuthMethod(),user); + } + } + + return Authentication.UNAUTHENTICATED; + } + + @Override + public boolean secureResponse(ServletRequest request, ServletResponse response, boolean mandatory, User validatedUser) throws ServerAuthException + { + return true; + } + +}