Hi Hank,

No reason to feel insecure about any of this :)

The specifics of authentication configuration are generally going to vary a bit 
depending on the servlet container you're using. I think one reason why the FDS 
docs for this are on the light side is because configuring a servlet container 
to auth against a database schema or LDAP directory or ... is something that 
your servlet container's docs should explain and aren't standardized. Here's a 
link to configuring security realms for Tomcat for instance: 
http://tomcat.apache.org/tomcat-5.5-doc/realm-howto.html

Once you've configured your servlet container to use your database of users and 
roles, protecting your FDS destinations is pretty simple. You just need to 
specify the roles that are allowed to access any protected destinations.

Once you've added security constraints to the destinations that require them, 
in your Flex app you'll want to write a simple form to get a username and 
password from a user and then use the setCredential() API on whatever client 
component you're using to interact with the target destination. So if you add a 
security constraint to a remoting destination, you'd do something like this to 
make your call:

var ro:RemoteObject = new RemotObject();
// set the proper destination, etc.
// then set credentials on the instance; you'd get username 
// and password via a form exposed to the user.
ro.setCredentials(username, password);
// then make your call
ro.invokeSomeMethod();

Before the method is invoked, your credentials will be sent to the server to 
authenticate the user. The setCredentials() method is defined for RemoteObject, 
HTTPService, WebService, DataService, etc.

The login command class you specify in services-config.xml is used to log the 
user in on the server. You don't need to do anything other than specifying the 
proper login command for the container you're running in (e.g. don't use the 
JRun login command if you're running on Tomcat). The various implementations do 
whatever is necessary for that given container to authenticate the supplied 
credentials and if they're ok an auth'ed Principal is stored in the client's 
session. This Principal is used to test that a client can access protected 
destinations based on role constraints. The only reason you'd need to worry 
about the login command API directly is if you were trying to run FDS on a 
container we don't support directly, or you have a very custom authentication 
scheme that you need to use because your container's native authentication 
isn't satisfactory (not likely).

HTH,
Seth

________________________________________
From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of hank 
williams
Sent: Wednesday, November 29, 2006 8:03 PM
To: flexcoders@yahoogroups.com
Subject: Re: [flexcoders] role based security vs session based security with a 
servlet container

By the way, after feeling quite insecure that I should really
understand all of this, but not, I did a little googling and
discovered that either this is so simple that it requires no
documentation or discussion, or no one is doing security properly with
FDS or no one is using FDS with authentication.

the search "flex.messaging.security" turned up 51 hits on google which
turned into maybe half that number of real hits. None of the hits was
particularly helpful, but the first hit is actually a javadoc
description of LoginCommand. Its *one* line.

the same search turned up only 8 threads in flexcoders. In each of the
cases where it is referenced it is just people including their
service-config.xml files. No explanations of anything.

In the online documentation flex.messaging.security turned up exactly
one hit which really just explains that there *is* a loginCommand API,
but not explaining how any of it works or is used.

By the way, my search results for setCredentials are similarly sparse.

So are flexcoders just not using FDS or are they not using
Authentication, or is everyone who is doing this just so much more
knowledgeable than me so no discussion anywhere on the net or on this
mailing list is required?

Hank

On 11/29/06, Seth Hodgson <[EMAIL PROTECTED]> wrote:
> Hi Hank,
>
> How do you do your logins now against your account database? You're not using 
> general J2EE auth?
>
> Role based security in FDS just wraps the existing J2EE auth machinery 
> provided by your app server. You can code your login UI in your Flex app and 
> before any calls or data exchange are permitted through a protected 
> destination authentication will be performed automatically using the 
> credentials you've specified via setCredentials(). You add a security 
> constraint to a destination like so (only users who are members of the 
> 'admin' role are allowed access in this case):
>
> <destination id="...">
> <security>
> <security-constraint ref="admins" />
> </security>
> ...
> </destination>
>
> The actual authentication is performed via an app server specific login 
> command class. FDS ships with implementations for all supported servers. The 
> command class to use is specified in the security section of the core config 
> file like so:
>
> <security>
> <login-command class="flex.messaging.security.JRunLoginCommand" 
> server="JRun"/>
> ...
>
> I'd recommend using J2EE auth as opposed to trying to role some other custom 
> approach. When security is involved it's really best to use existing 
> libraries and frameworks that have been heavily tested (J2EE auth for 
> instance), because bugs in this area tend to be more dangerous than bugs in 
> your UI code.
>
> HTH,
> Seth
>
> ________________________________________
> From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of hank 
> williams
> Sent: Tuesday, November 28, 2006 10:01 AM
> To: flexcoders@yahoogroups.com
> Subject: [flexcoders] role based security vs session based security with a 
> servlet container
>
> I am trying to figure out the best way of implementing security & 
> authentication. I am using tomcat, and FDS at the moment for remoting. My 
> server side code is obviously in java.
>
> A while back, role base security was recommended as the way to implement 
> security. The idea being that if someone did not have the right credentials 
> that they would be prevented from gaining access to the flex app. But my 
> problem with this is that I want to do my authentication UI *in* flex, so I 
> can't prevent people from getting to it before I have had a chance to 
> authenticate. Another problem with the role based stuff is that, as I 
> understand it, roles are maintained by the container. I am not clear how to 
> use my account database (JDBC/Mysql) in this process.
>
> What seems easier to me is using sessions, because I can, from any server 
> side function, request the current session of the given user. I can look to 
> see if their session is valid, how long they have been logged on, etc. And 
> using this methodology, I can do login in the flex application, which just 
> sends a login message to the server, the server adds a record to my session 
> record that indicates that I am logged in and when I logged in.
>
> This second approach seems like the best approach and the one that gives me 
> the most flexibility. But I am looking for validation regarding my approach 
> here. Am I doing something wrong here? Are there some reasons that the role 
> based security would be better?
>
> Any insight from people better versed in security than I am would be greatly 
> appreciated.
>
> Hank
>
>
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>
>
>
>
 

Reply via email to