View Javadoc

1   /*
2   jGuard is a security framework based on top of jaas (java authentication and authorization security).
3   it is written for web applications, to resolve simply, access control problems.
4   version $Name$
5   http://sourceforge.net/projects/jguard/
6   
7   Copyright (C) 2004  Charles GAY
8   
9   This library is free software; you can redistribute it and/or
10  modify it under the terms of the GNU Lesser General Public
11  License as published by the Free Software Foundation; either
12  version 2.1 of the License, or (at your option) any later version.
13  
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  Lesser General Public License for more details.
18  
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  
23  
24  jGuard project home page:
25  http://sourceforge.net/projects/jguard/
26  
27  */
28  
29  package net.sf.jguard.core.authentication.schemes;
30  
31  import java.security.PermissionCollection;
32  import java.util.Collection;
33  import java.util.List;
34  import javax.security.auth.callback.Callback;
35  import javax.security.auth.callback.UnsupportedCallbackException;
36  import javax.security.auth.spi.LoginModule;
37  import net.sf.jguard.core.authentication.AccessContext;
38  import net.sf.jguard.core.authentication.AuthenticationException;
39  
40  /**
41   * represents the way a user authenticate against a challenge <b>through a SPECIFIC underlying technology</b>.
42   * for example, a challenge like a username and password token, can be
43   * enforced in different ways(FORM and BASIC for example), and with different
44   * underlying technologies (HttpServlet and Swing for example).
45   * Note that multiple exchanges can be encountered between client and server to establish
46   * a securized communication. These exchanges are <b>NOT</b> decided by any {@link AuthenticationSchemeHandler}
47   * implementations but by {@link LoginModule}s which enforce an Authentication Scheme.
48   * AuthenticationSchemeHandler only help the loginModule to communicate with the client
49   * through its supported underlying technology.
50   * @author <a href="mailto:diabolo512@users.sourceforge.net">Charles Gay</a>
51   */
52  public interface AuthenticationSchemeHandler {
53  
54      /**
55       * unique name of the Authentication Scheme.
56       * @return
57       */
58      public String getName();
59      
60      
61      /**
62       * return Callbacks classes needed by LoginModules to authenticate the client.
63       * @return
64       */
65      public Collection<Class> getCallbackTypes();
66      
67      
68      /**
69       * evaluate if the user <b>tries</b> to answer to the challenge.
70       * @param context
71       * @return
72       */
73      public boolean answerToChallenge(AccessContext context);
74      
75      
76      /**
77       * create a challenge in the underlying technology way.
78       * @param context
79       * @throws net.sf.jguard.core.authentication.AuthenticationException
80       */
81      public void buildChallenge(AccessContext accessContext)throws AuthenticationException;
82  
83      public PermissionCollection getGrantedPermissions();
84      
85      /**
86       * translate in the underlying technology the authentication success.
87       * @param context
88       */
89      public void authenticationSucceed(AccessContext context)throws AuthenticationException;
90      
91      /**
92       * translate in the underlying technology the authentication failure.
93       * @param context
94       */
95      public void authenticationFailed(AccessContext context)throws AuthenticationException;
96  
97      
98      public void handleSchemeCallbacks(AccessContext context,List<Callback> cbks)throws UnsupportedCallbackException;
99  }