[ 
https://issues.apache.org/jira/browse/OAK-1922?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

angela resolved OAK-1922.
-------------------------

    Resolution: Fixed

committed patch4 with the mentioned modifications at r1607693

> Introduce Password Expiry With Max Password Age and On First Login
> ------------------------------------------------------------------
>
>                 Key: OAK-1922
>                 URL: https://issues.apache.org/jira/browse/OAK-1922
>             Project: Jackrabbit Oak
>          Issue Type: New Feature
>          Components: security
>    Affects Versions: 1.0, 1.0.1
>            Reporter: Dominique Jäggi
>            Assignee: angela
>             Fix For: 1.1
>
>         Attachments: 
> OAK-1922_-_Introduce_Password_Expiry_With_Max_Password_Age_and_On_First_Login.patch,
>  OAK-1922_2.patch, OAK-1922_4.patch, OAK-1922_review.txt
>
>
> [~anchela], i am submitting a patch, for the addition of the following 
> features:
> *Password Expiry*
> Administrators should be able to configure passwords to expire within a 
> configurable amount of time (days). A user whose password has expired can no 
> longer authenticate - a CredentialExpiredException is thrown.
> *Initial Password Change*
> An administrator should be able to configure the system such that a user is 
> forced to set a new password upon first login. This is a special form of 
> Password Expiry above, in that upon creation a user account's password is 
> expired by default.
> *Configuration of Expiry*
> An administrator may enable password expiry and initial password change via 
> the org.apache.jackrabbit.oak.security.user.UserConfigurationImpl OSGi 
> configuration. By default expiry is disabled. The following configuration 
> options should be supported:
> * Maximum Password Age (maxPasswordAge, days): when greater 0 enables 
> password expiry and sets the expiration time in days
> * Enforce Password Change (initialPasswordChange, true|false): when true 
> enables password change on first login.
> *Definition of Expired Password*
> An expired password is defined as follows:
> * The current date-time is after or on the date-time + maxPasswordAge 
> specified in a rep:passwordLastModified property
> * OR: Expiry and/or Enforce Password Change is enabled, but no 
> rep:passwordLastModified property exists
> For the above, a new property definition is required. In order to accommodate 
> the property as well as future enhancements to password management (such as 
> password policies, history, et al), the suggestion is to introduce a rep:pw 
> user sub-node, governed by a new rep:Password node type, enforcing required 
> property restriction.
> The rep:passwords node and the rep:passwordLastModified property must be 
> protected in order to guard against the user modifying (overcoming) her 
> password expiry. The new sub-node also has the advantage of allowing 
> repository consumers to e.g. register specific commit hooks / actions on such 
> a node.
> In the future the rep:password property on the user node should be migrated 
> to the rep:pw sub-node.
> *User Creation With Default Expired Password*
> Upon initial creation of a user, the rep:passwordLastModified property is 
> omitted. If expiry or initialPasswordChange are enabled, the absence of the 
> property will be interpreted as immediate expiry of the password. When 
> subsequently the user changes her password via User#changePassword, the 
> rep:passwordLastModified property is set and henceforth interpreted.
> *Authentication Password Expiry Aware*
> A login module should throw a 
> javax.security.auth.login.CredentialExpiredException upon encountering an 
> expired password. A consumer implementation can then differentiate between a 
> failed login (due to a wrong password specified) and an expired password, 
> allowing the consumer to take action, e.g. to redirect to a change password 
> form. In Oak, the Authentication (currently UserAuthentication) 
> implementation would within its #authenticate() compare the system time with 
> the value stored in the rep:passwordLastModified and throw a 
> CredentialExpiredException if now is after or on the date-time specified by 
> the value. In the case of initialPasswordChange a password is considered 
> expired if no rep:passwordLastModified property can be found on login.
> Both expiry and force initial password change must be checked *after* regular 
> credential verification, so as to prevent an attacker identifying valid users 
> by being redirected to a change password form upon expiry.
> kindly accept the patch for review and let me know your feedback.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to