[ http://jira.jboss.com/jira/browse/JBPORTAL-184?page=history ]

Julien Viet updated JBPORTAL-184:
---------------------------------

                  Summary: Remember me feature  (was: The remember me feature 
allows someone not to have to enter his password when he comes back on the 
portal)
              Description: 
- remember me feature - 

Login process in the portal. 

Introduction 

In order to have the portal play nice with J2EE security it is not possible 
to use directly the JBossSX API or the JAAS API. The reasons are various : 

- specific to JBoss 
- does not respect the portlet specification 
- only form login can be used, no client certificate authentication 
would work 
- does not take advantage of JBoss SSO or tomcat SSO 

Therefore the login must be processed by the servlet container. 

Architecture and login protocol 

Login in JBoss portal follows a well defined protocol which uses 
the following elements : 

- org.jboss.portal.core.security.Status object : defines the status of 
a user. It is stored in the http session and has the following 
attributes : username, password and a boolean signedIn. When the 
user is not logged in the http session does not contains this object. 
When a user performs a login it contains its username and password 
and the boolean signedIn is false. The signedIn value 
becomes true only if the user authenticates succesfully. 

- LoginServet : this servlet initiates the login protocol. It takes 
a mandatory user name and password as arguments and 
an optional redirect url argument. 

- AuthenticationServlet : this servlet is a protected resource of the 
portal web application. It means that it can be reached only by 
fully authenticated users. The role of this servlet is to 
terminate the login protocol. 

- FormLoginServlet : this servlet intercepts is used by the servlet 
container which calls it whenever the user tries to reach 
the AuthenticationServlet and is not authenticated. 

The protocol is described now : 

1. a request is made with the URL /login?username=foo&password=bar 

2. the LoginServlet process the request : 

2.a it creates a status object which username, passwords, signedIn 
value false and put it in the http session 

2.b it redirects to the authentication servlet with the URL : 
/authentication?username=foo&password=bar 

3. the user browser receive the redirection and process it 

4. the servlet container receives the request and see that the user is 
not authenticate so it redirect internally the call to the FormLoginServlet 

5. the FormLoginServlet process the request, it simply redirects to 
the URL /j_security_check?j_username=foo&j_password=bar which 
has a special meaning for the servlet container in the 
authentication process. 

6. the servlet container process the j_security_check URL : 

6.a it delegates the authentication to JBossSX which delegates in turns 
to JAAS LoginModule stack 

6.b we suppose that the authentication is succesfull, the servlet 
container delegates the request to the AuthenticationServlet 

6.c the AuthenticationServlet process the request, it sets the 
boolean signedIn to true on the Status object which is stored in the 
http session and it optionnally redirects to the optional redirect URL 

Improvements : 

We want to add the remember me feature in that protocol. 
The remember feature authorize a user to not perform a login 
a second time when it has succesfully authenticated one time in 
the past. This feature uses the cookies to store a ticket that proves 
the the user identity. The integration of that feature must not bypass 
the authentication protocol. When a user arrives on the site with any 
URL, it must execute the login protocol transparently. 

The concept used are : 

The ticket : 
This object is an authorization ticket. It has the following attributes : 
- expiration date 
- a unique hash value 
- username 
- password 

The ticket store : 
Simply stores tickets. It is possible to create tickets and check 
ticket validity. It also manage old ticket garbaging. 

RememberMeServletFilter : 
This servlet filter is positionned on any URL that own the remember 
me property. It is responsible for managing the ticket stores 
cookies. When a user comes in with a ticket cookie, it uses 
the ticket store to check the cookie validity and if it is valid, it uses 
the username and password to initiate the login protocol with 
a redirection URL positionned to the actual incoming URL. 

StoreTicketFilter : 
This servlet filter is put in front of the AuthenticationServlet, it means 
that it will be always executed once 
the user has been fully authenticated by the servlet container. 
The role of this filter is to create a ticket in the store for the current 
user. 

This approach is non intrusive and does not need modification in the 
login protocol explained before. It is also simple to remove for 
people that don't want or need that feature on their portal infrastructure

  was:A discussion has been initiated on the forum

    JBoss Forum Reference:   (was: 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3862921#3862921)

> Remember me feature
> -------------------
>
>          Key: JBPORTAL-184
>          URL: http://jira.jboss.com/jira/browse/JBPORTAL-184
>      Project: JBoss Portal
>         Type: Feature Request
>   Components: Portal Core
>     Versions: 2.0 Beta
>     Reporter: Julien Viet

>
> Original Estimate: 1 day
>         Remaining: 1 day
>
> - remember me feature - 
> Login process in the portal. 
> Introduction 
> In order to have the portal play nice with J2EE security it is not possible 
> to use directly the JBossSX API or the JAAS API. The reasons are various : 
> - specific to JBoss 
> - does not respect the portlet specification 
> - only form login can be used, no client certificate authentication 
> would work 
> - does not take advantage of JBoss SSO or tomcat SSO 
> Therefore the login must be processed by the servlet container. 
> Architecture and login protocol 
> Login in JBoss portal follows a well defined protocol which uses 
> the following elements : 
> - org.jboss.portal.core.security.Status object : defines the status of 
> a user. It is stored in the http session and has the following 
> attributes : username, password and a boolean signedIn. When the 
> user is not logged in the http session does not contains this object. 
> When a user performs a login it contains its username and password 
> and the boolean signedIn is false. The signedIn value 
> becomes true only if the user authenticates succesfully. 
> - LoginServet : this servlet initiates the login protocol. It takes 
> a mandatory user name and password as arguments and 
> an optional redirect url argument. 
> - AuthenticationServlet : this servlet is a protected resource of the 
> portal web application. It means that it can be reached only by 
> fully authenticated users. The role of this servlet is to 
> terminate the login protocol. 
> - FormLoginServlet : this servlet intercepts is used by the servlet 
> container which calls it whenever the user tries to reach 
> the AuthenticationServlet and is not authenticated. 
> The protocol is described now : 
> 1. a request is made with the URL /login?username=foo&password=bar 
> 2. the LoginServlet process the request : 
> 2.a it creates a status object which username, passwords, signedIn 
> value false and put it in the http session 
> 2.b it redirects to the authentication servlet with the URL : 
> /authentication?username=foo&password=bar 
> 3. the user browser receive the redirection and process it 
> 4. the servlet container receives the request and see that the user is 
> not authenticate so it redirect internally the call to the FormLoginServlet 
> 5. the FormLoginServlet process the request, it simply redirects to 
> the URL /j_security_check?j_username=foo&j_password=bar which 
> has a special meaning for the servlet container in the 
> authentication process. 
> 6. the servlet container process the j_security_check URL : 
> 6.a it delegates the authentication to JBossSX which delegates in turns 
> to JAAS LoginModule stack 
> 6.b we suppose that the authentication is succesfull, the servlet 
> container delegates the request to the AuthenticationServlet 
> 6.c the AuthenticationServlet process the request, it sets the 
> boolean signedIn to true on the Status object which is stored in the 
> http session and it optionnally redirects to the optional redirect URL 
> Improvements : 
> We want to add the remember me feature in that protocol. 
> The remember feature authorize a user to not perform a login 
> a second time when it has succesfully authenticated one time in 
> the past. This feature uses the cookies to store a ticket that proves 
> the the user identity. The integration of that feature must not bypass 
> the authentication protocol. When a user arrives on the site with any 
> URL, it must execute the login protocol transparently. 
> The concept used are : 
> The ticket : 
> This object is an authorization ticket. It has the following attributes : 
> - expiration date 
> - a unique hash value 
> - username 
> - password 
> The ticket store : 
> Simply stores tickets. It is possible to create tickets and check 
> ticket validity. It also manage old ticket garbaging. 
> RememberMeServletFilter : 
> This servlet filter is positionned on any URL that own the remember 
> me property. It is responsible for managing the ticket stores 
> cookies. When a user comes in with a ticket cookie, it uses 
> the ticket store to check the cookie validity and if it is valid, it uses 
> the username and password to initiate the login protocol with 
> a redirection URL positionned to the actual incoming URL. 
> StoreTicketFilter : 
> This servlet filter is put in front of the AuthenticationServlet, it means 
> that it will be always executed once 
> the user has been fully authenticated by the servlet container. 
> The role of this filter is to create a ticket in the store for the current 
> user. 
> This approach is non intrusive and does not need modification in the 
> login protocol explained before. It is also simple to remove for 
> people that don't want or need that feature on their portal infrastructure

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.jboss.com/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
JBoss-Development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to