On 8/3/12 3:48 AM, "jleleu" <lel...@gmail.com> wrote:

>Things are getting clearer now and I will start writing the spec next
>week.
>
>I think we could do better than just working "in the right direction", so
>I also plan to create a roadmap with several iterations, each iteration
>with several tasks to do. This way, everyone who wants to contribute can
>pick up a task and help. The spec and roadmap will be of course
>proposals, to be discussed and validated.

Great!

>Nathan, I have three questions for you :
>
>1) Server enforcement (proactive)
>It's not clear to me how increasing LOA is triggered in this case.

This is actually mostly outside of the scope of CAS, though I think CAS
should have extension points to handle this, and maybe a delivered example
implementation.  Our biggest use-case is with password policies and
password strength requirements.

Let's say we have a conference attendee who can only access the conference
registration tool.  Let's say he is required to have a password of 6
characters or more.  At a later date he is hired as an employee.  This
triggers a rule such that he must now adhere to a different password
policy, such as 8+ characters with mixed case and special characters.

We intend to implement all of this outside of CAS using SOA, Drools,
Grouper, and LDAP.  Data flows from our HR system through our SOA,
triggering Drools to run, which computes role membership and stores that
into Grouper, which then assigns group membership in LDAP.

This is related to CAS in two ways:
1) We want CAS to include a password strength indicator as part of
authentication metadata associated with an LDAP user/pass authentication
event.
2) We want CAS to run some code that compares current password strength
against required password strength (based on LDAP group membership) during
login, with the ability to intercept the login and force the user to enter
a new password before continuing.  This fits directly with the concept of
"interrupt screens" previously discussed in a different thread (generally
in the context of acceptable use polices).  I feel that interrupt screens
make up an important aspect of a complete LOA implementation.  I think
there should be a pluggable spot in CAS to handle interrupt screens, and
that we should provide a default (example) implementation for password
strength requrements.

>2) Numeric value of the LOA
>I think it will lead us to complex algorithms to have LOA with range
>level (2 - 4) instead of many LOA, each having only one value.
>Any concern with that ?

Yes, complexity is a concern.  I actually would probably implement that
with multiple LOA policy definitions (as you recommend), like this:
(auth_method = LDAP) and (password_strength < 5) ==> LOA=2
(auth_method = LDAP) and (password_strength >= 5) and (password_strength <
8) ==> LOA=3

(auth_method = LDAP) and (password_strength >= 8) ==> LOA=4


The point is that there is a mapping from the authentication methods _and
their attriutes_ to LOA numbers.  And the mapping needs to be reversible,
so that if a user happens to violate a numerical policy, then the CAS
server can given them adequate instructions about what to do next or at
least why they were rejected.

>3) About LOA requested by clients, you described very ambitious
>scenarios, like "LDAP username/password with a password strength of 8 or
>more, Google Authenticator, or a TGT session cookie that was established
>using one of the other accepted methods and used within the past four
>hours".
>I would simplify that by saying that you can request a LOA with a
>specific numeric level (3 = medium security, for example), which can
>match several LOA or you can request a specific LOA (authenticate with
>Google).
>I assume that LOA requested by clients are always known on CAS server
>side.
>Does it match your use cases ?

My original assumption was that the server would contain a set of
authentication methods (each identified by a unique string, such as "ldap"
or "Facebook") and a set of expressions (policies) that map combinations
of these methods and their metadata to numeric values.  When all is said
and done, the client needs to somehow specify which policy they want to
use.  You could, for example, include a string with the policy's
expression right in the query parameter when redirecting from client to
server.  You could also pass a numeric identifier that could be mapped to
one or more server-side policies.  Alternatively, you could pass a policy
string identifier or list of acceptable identifiers (instead of a number)
that correspond to policies pre-registered with the server.  Finally, you
could store a specific policy expression, number, or list of acceptable
identifiers as an attribute of the registered service if you're using the
Service Registry.

I think it would be sufficient and cover all of my use cases to require
policy expressions to be pre-registered in some way on the server and only
use a number or a list of string identifiers to communicate policy
requirements from client to server.

-Nathan




-- 
You are currently subscribed to cas-dev@lists.jasig.org as: 
arch...@mail-archive.com
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-dev

Reply via email to