Hi,

Thanks for that comprehensive information, we will certainly look into it.

In saying that jetty-jaspi currently does not work well on jetty-8, does
this mean that it is working fine
with jetty-7? We try to maintain as much of the codebase in common between
jetty-7 and jetty-8 as
possible, so I'd like to know if this is something that should go into
jetty-7, and will then get merged
into jetty-8, or if this is a problem specific to jetty-8.

thanks
Jan

On 28 September 2011 15:23, Guofeng Zhang <[email protected]> wrote:

>  Hi,****
>
> ** **
>
> JASPI make us to plug in other authentication module (for example, using
> openID or other mechanism to authenticate users) easier on Jetty for
> container-managed security. There is jetty-jaspi module in the Jetty source
> code base, but I think it has not been maintained for a long time.****
>
> ** **
>
> By making a little fix on jetty-jaspi module, I make the JASPI works well
> on Jetty 8. I attach the changes. I hope if I did it well, it could be
> merged into the next Jetty 8 release.****
>
> ** **
>
> To use JASPI:****
>
> **1.       **Creating a JASPI configuration XML file for your auth module:
> ****
>
> <?xml version="1.0" encoding="UTF-8"?>****
>
> <jaspi xmlns="http://geronimo.apache.org/xml/ns/geronimo-jaspi";>****
>
> ** **
>
>     <configProvider>****
>
>         <messageLayer>HTTP</messageLayer>****
>
>         <appContext>/ui</appContext>****
>
>         <description>description</description>****
>
>         <serverAuthConfig>****
>
>
> <authenticationContextID>authenticationContextID2</authenticationContextID>
> ****
>
>             <protected>true</protected>****
>
>             <serverAuthContext>****
>
>                 <serverAuthModule>****
>
>
> <className>org.eclipse.jetty.security.jaspi.modules.FormAuthModule</className>
> ****
>
>                     <options>****
>
>
> org.eclipse.jetty.security.jaspi.modules.LoginPage=/secure/jaaslogin****
>
>
> org.eclipse.jetty.security.jaspi.modules.ErrorPage=/secure/jaaserror****
>
>                     </options>****
>
>                 </serverAuthModule>****
>
>             </serverAuthContext>****
>
>         </serverAuthConfig>****
>
>         <persistent>true</persistent>****
>
>     </configProvider>****
>
> </jaspi>****
>
>    The above using the Jetty built-in FormAuthModule, if you want to use
> the built-in Basic or Digest auth module, the <serverAuthModule> part should
> be:****
>
>                 <serverAuthModule>****
>
>
> <className>org.eclipse.jetty.security.jaspi.modules.DigestAuthModule</className>
> ****
>
>                     <options>****
>
>
>  org.eclipse.jetty.security.jaspi.modules.RealmName=JAASRealm****
>
>                     </options>****
>
>                 </serverAuthModule>****
>
> Or****
>
>                 <serverAuthModule>****
>
>
> <className>org.eclipse.jetty.security.jaspi.modules.BasicAuthModule</className>
> ****
>
>                     <options>****
>
>
> org.eclipse.jetty.security.jaspi.modules.RealmName=JAASRealm****
>
>                     </options>****
>
>                 </serverAuthModule>****
>
> ** **
>
> Here I use the implementation of JASPI of geronimo-jaspi 2.0-SNAPSHOT from
> geronimo-jaspi (https://github.com/apache/geronimo-jaspi). you could use
> geronimo-jaspi 1.1.1 release, but you might need to implements
> javax.security.auth.message.config.AuthConfigProvider (and not
> javax.security.auth.message.module.ServerAuthModule) and configure it in the
> above XML file.****
>
> ** **
>
> **2.       **Configuring your AppContext to use JaspiAuthenticatorFactory.
> I configured it in jetty-web.xml file:****
>
> <Configure class="org.eclipse.jetty.webapp.WebAppContext">****
>
>   <Set name="securityHandler">****
>
>       <New class="org.eclipse.jetty.security.ConstraintSecurityHandler">**
> **
>
>          <Set name="loginService">****
>
>             <New class="org.eclipse.jetty.plus.jaas.JAASLoginService">****
>
>               <Set name="name">JAASRealm</Set>****
>
>               <Set name="loginModuleName">jaas</Set>****
>
>             </New>****
>
>          </Set>****
>
> ** **
>
>          <Set name="authenticatorFactory">****
>
>              <New
> class="org.eclipse.jetty.security.jaspi.JaspiAuthenticatorFactory" />****
>
>          </Set>****
>
>       </New>****
>
>   </Set>****
>
> </Configure>****
>
> ** **
>
> **3.       **When launching Jetty, using
> -Dorg.apache.geronimo.jaspic.configurationFile to tell geronimo-jaspi where
> to find the JASPI configuration file. The following is the
> jetty-maven-plugin configuration (my JASPI configuration file is
> form-test-jaspi-2.xml):****
>
>       <plugin>****
>
>         <groupId>org.mortbay.jetty</groupId>****
>
>         <artifactId>jetty-maven-plugin</artifactId>****
>
>         <version>${jetty.version}</version>****
>
>        <configuration>****
>
>            <scanIntervalSeconds>10</scanIntervalSeconds>****
>
>            <webAppConfig>****
>
>               <contextPath>/ui</contextPath>****
>
>               <parentLoaderPriority>true</parentLoaderPriority>****
>
>           </webAppConfig>****
>
> ** **
>
>           <systemProperties>****
>
>              <systemProperty>****
>
>                <name>java.security.auth.login.config</name>****
>
>                <value>./conf/jetty/jaas.conf</value>****
>
>             </systemProperty>****
>
>             <systemProperty>****
>
>               <name>org.apache.geronimo.jaspic.configurationFile</name>***
> *
>
>               <value>./conf/jaspi/form-test-jaspi-2.xml</value>****
>
>             </systemProperty>****
>
>         </configuration>****
>
>         <dependencies>****
>
>            <dependency>****
>
>               <groupId>org.eclipse.jetty</groupId>****
>
>               <artifactId>jetty-jaspi</artifactId>****
>
>               <version>${jetty.version}</version>****
>
>            </dependency>****
>
>            <dependency>****
>
>               <groupId>org.apache.geronimo.components</groupId>****
>
>               <artifactId>geronimo-jaspi</artifactId>****
>
>               <version>2.0-SNAPSHOT</version>****
>
>            </dependency>****
>
>          </dependencies>****
>
>       </plugin>****
>
> In my test, I use my own JAAS login module, which configured in jaas.conf.
> you could use Jetty built-in login module as described in
> http://wiki.eclipse.org/Jetty/Feature/JAAS.****
>
> ** **
>
> Q: what I cannot know if I did it correctly is the changes to
> JaspiAuthenticator. I removed the following lines at the beginning of
> validateRequest():****
>
>         if (_allowLazyAuthentication && !mandatory)****
>
>             return _deferred;****
>
> and add the following:****
>
>                      if ( !isMandatory( messageInfo ) )****
>
>                                return _deferred ;****
>
> after “if (authStatus == AuthStatus.SUCCESS)” at line 114. This make me
> have to add the following in validateRequest() of FormAuthModule class:***
> *
>
>             Authentication authentication =
> ((org.eclipse.jetty.server.Request)request).getAuthentication() ;****
>
>             if (authentication instanceof Authentication.Deferred )****
>
>                 return AuthStatus.SEND_SUCCESS;****
>
> or the unprotected resources won’t be handled properly. This makes the auth
> module to have to know how Authentication.Deferred works, it is not an
> easier to use dependency. This might be that I do not understand
> DeferredAuthentication class clearly. Your advice is appreciated.****
>
> ** **
>
> Thanks.****
>
> ** **
>
> ** **
>
> _______________________________________________
> jetty-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to