使用码头进行代理身份验证

proxy authentication using jetty

我想知道是否可以使用码头在 Java 中进行代理身份验证。我已经能够使用 Jetty 执行基本和摘要身份验证方案,并且 Jetty 中有一些简单的方法可以使用伪代码设置这些身份验证方案,如下所示:

constraint = org.mortbay.jetty.security.Constraint();
constraint.setName(constraint.('__BASIC_AUTH'))
constraint.setRoles({'admin'});
constraint.setAuthenticate(true);
constraintMapping = ConstraintMapping();
constraintMapping.setConstraint(constraint);
constraintMapping.setPathSpec('/*');
securityHandler = SecurityHandler();
securityHandler.setUserRealm(myrealm);
securityHandler.setConstraintMappings(constraintMapping );

类似地,对于 DIGEST 身份验证,__BASIC_AUTH 可以替换为 __DIGEST_AUTH。我正在使用 HttpServlets 来处理 requests/responses。但是,如果我想实现基于代理的身份验证,我该怎么做呢?

我是否需要使用 httpservlet 的 doGet() 并尝试进行身份验证并显式转发到另一个地址,或者有没有办法使用码头本身来设置基于代理的身份验证(或代理本地主机服务器),如伪代码所示多于?

我能否获得一些代码帮助来执行基于代理的身份验证,以验证 HttpServlet 请求并将其转发到另一个 servlet/server?

至于 current version of Jetty (9.3.3.v20150827)Proxy-Authenticate header 与 WWW-Authenticate 没有任何关系 header表示Servlet约束系统。

从约束的角度来看,Servlet 规范或 Jetty 实现中没有内置任何内容来支持 Proxy-Authenticate 客户端 header。

但是,使用 Jetty 9。3.x 您可以使用 AsyncProxyServlet, AsyncProxyServlet.Transparent, AsyncMiddleManServlet, or AsyncMiddleManServlet.Transparent 以您自己的方式处理此 Proxy-Authenticate header。

为此,您将从其中一个扩展开始,然后覆盖 sendProxyRequest(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, Request proxyRequest)

在您的 sendProxyRequest() 版本中,查看 clientRequest header 的 Proxy-AuthenticateProxy-Authorize,并执行最适合的基于代理的身份验证适合您的需要。

如果认证通过,则调用super.sendProxyRequest(clientRequest, proxyResponse, proxyRequest);

否则使用proxyResponse发送回质询响应。