使用jetty的代理身份验证



我试图找出是否有可能在Java中使用jetty进行代理身份验证。我已经能够使用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。我使用httpservlet来处理请求/响应。但是,如果我想实现基于代理的身份验证,我该怎么做呢?

我是否需要使用httpservlet的doGet()并尝试身份验证和显式转发到另一个地址,或者是否有一种方法使用jetty本身来设置基于代理的身份验证(或代理本地主机服务器),如上面的pseudo所示?

我可以得到一些帮助的代码做基于代理的身份验证,验证和转发HttpServlet请求到另一个servlet/服务器?

对于当前版本的Jetty (9.3.3.v20150827), Proxy-Authenticate标头与Servlet约束系统的WWW-Authenticate标头没有任何关系。

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

但是,使用Jetty 9.3。您可以使用AsyncProxyServlet, AsyncProxyServlet.Transparent, AsyncMiddleManServletAsyncMiddleManServlet.Transparent来按照自己的方式处理这个Proxy-Authenticate标头。

要做到这一点,您将从其中一个扩展开始,然后覆盖sendProxyRequest(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, Request proxyRequest)

在您的sendProxyRequest()版本中,查看Proxy-AuthenticateProxy-AuthorizeclientRequest标头,并执行最适合您需求的基于代理的身份验证。

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

否则使用proxyResponse发送回挑战响应

最新更新