...
Nathan:
From reading this suggestion (e.g. SmsUsernamePasswordAuthenticaitonHandler), as a deployer I would think that it actually adds significant complexity (for deployers), since deployers would need to create a custom set of classes (credential, handler, and interaction) for every multi-factor combination. Certainly, there may be ways to simplify the "expression" concept (see more comments below), but the general concept is this: deployers should be able to mix and match authentication handlers out of the box without needing to write any new code. I think that LOA should introduce a concept that allows the composition of authenticator handlers without the need to write code. Another method of implementing this (instead of using expressions) would be to implement some generic "composition" handler classes that can be used to combine other handlers into a single one without writing code. However, I think it would be easier for the deployer to work with expressions, since otherwise you'd have to deal with composing the Credentials, AuthenticationHandler, and UserInteraction all separately, whereas the expression would allow you to do the composition all in one spot.
Here's another thought perspective that can maybe help to get us on the same page: You can think of my suggestion of "constraint expressions" as a way to dynamically define a new AuthenticationHandler (along with the corresponding Credentials and UserInteraction), composed of other pre-existing handlers, without needing to write code. Then, each AuthenticationHandler (whether Java-based or expression-based) is given a name and a number. And, again, I'm not tied to the concept of an expression... I'm more tied to the concept of deployers being able to easily composing compose existing authentication methods (including together without writing code (and with automatically also composing all necessary related components ) together without writing codelike credentials and user interactions).
B) Level of assurance (new)
...
LPPE is great, but it alone not sufficient. LPPE is a very specialized solution, and I'm talking about a generalized solution. As you mention, LPPE only works for LDAP (and for password policies). I think we need It would be nice to have a pluggable concept (Java interface + Spring extension point) that works for any authentication handler and in any place where you want to interrupt the user after login for any reason. Yes, we should reuse build upon the concepts of LPPE (such as the ability to handle various return values that come out of the authentication handler action), but I think it needs to be generalized a little bit more, since LDAP Password Policies are only one of many possible reasons you might wish to interrupt the login process. Other reasons (some of which have been mentioned in the CAS mailing lists):
- annual acceptable use policy
- need to increase password strength
- need to register (or confirm) contact information such as cell #
- need to select security Q&A
- need to register device/browser (you've probably seen facebook do this, for example)
I think it would greatly benefit CAS to have a generalized solution for interrupt screens, and I
don'tthink it
would add much complexity to CAS configurationcould be done without much complexity by simply generalizing the concepts found in LPPE.
E) Interaction manager (new)
...
VII. Roadmap
A) Version 1.0 : only client requested LOA
...