[ 
https://issues.apache.org/jira/browse/OFBIZ-4983?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13620752#comment-13620752
 ] 

Harsha Chadhar commented on OFBIZ-4983:
---------------------------------------

In above proposal it has been suggested that the user while creating account is 
required to enter minimum number of security questions so that while recovering 
his account details he can only do it by answering correctly these security 
questions. 
    Currently while reclaiming account details through mail the new/current 
password is sent in the mail body. In provided implementation following has 
been achieved with a slight modification in existing approach :

As the user clicks on the forgot password link and selects the email password 
option, the link to reset password will be sent over the mail as follows: 
# The current password will be an encrypted password sent as an input parameter 
over the email.
# As the user clicks on the reset password link and he is redirected to 
change/reset password screen, which will have the current password as a hidden 
input field.
# The user will be required to enter a new password and confirm password values 
in Reset Password screen.
# The user is required to answer the security question which he has chosen 
while creating user/registration. If he has not selected any security question 
then  the default change password screen will be displayed.
# Once all of the above conditions are fulfilled the user will be allowed to 
reset the password.

The Current implementation restrict the user to enter at least one security 
question while creating account, this may be enhanced to a set of minimum 
number in later patches. 

h4.Implementation details :

*UI Changes* : 
        * CreateUser : Select box and text box has been added for Security 
Question and Answer. (Create Employee/ Create Prospect/ Create Customer).
        * CreateUserLogin (partymgr/Security): Select box and text box has been 
added for Security Question and Answer. 
        * Reset Password Email : Removed password text from email body, 
replaced by a form where auto generated encrypted password (current password) 
is sent as hidden value.

*Service Changes* :
        * createUser/createUserLogin : Create UserLoginSecurityQuestion record 
for pair of Security Question & answer if provided.
        * CRUD services for UserLoginSecurityQuestion entity.

*Testing prerequisites* :
        * Mail settings to be done in general.properties.
        * The demo data provided above need to be imported.

*Testing Steps* :
        * Create a Party(Customer/Employee/Prospect) from partymgr. Select a 
security question from the given options, answer it and submit.
        * Go to login page (ex : https://<yourhost>/partymgr/control/login).
        * Click on the "forgot password" link.
        * Enter the username and click on continue.
        * Answer the security question corresponding to the one selected while 
creating account.
        * Click on the Email Password link.
        * Check the received mail, click on the "Click here to Reset Password" 
link.
        * In the reset password form enter the Current Password/ Verify 
Password and answer of the corresponding Security question.
        * Once all details are correctly entered the user is allowed to login 
to the application.

h4.Future enhancements may include :
# Implementation of the feature for eCommerce screens.
# The minimum number of Security Question to be answered by the user while 
creating account can be more than one, including the capability of defining 
his/her own custom security questions.

Please find the patch in attachment along with the to-be screens screenshots.

                
> New feature to reclaim a user account - Using Security Questions
> ----------------------------------------------------------------
>
>                 Key: OFBIZ-4983
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-4983
>             Project: OFBiz
>          Issue Type: New Feature
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: Harsha Chadhar
>             Fix For: SVN trunk
>
>
> *Referring to Vikas's proposed model on Reclaiming User Account using 
> security questions as follows :*
> "When a customer create an account on eCommerce site, he will also  
> need to answer few security questions. We can enforce restriction on  
> the minimum number of questions that must be answered by a user before  
> creating his profile successfully, through some configurations which  
> are discussed in the next section. These security questions then can  
> be used to reclaim the customer account in case he forget his  
> password. User can also be given a choice to add his own custom  
> questions and this would be enable/disabled again through some  
> configurations.
> If the user correctly answer minimum required questions while  
> reclaiming his account, password will be send through email  
> notifications. This part would work in the same way as the existing  
> functionality of email password (forget password)."
> We would probably need the screens to configures
> 1) Security Question in the system.
> These questions will be called as Standard security questions and can  
> only be entered by an admin (or a person with similar sort of  
> privileges). These questions will be available to every user who  
> create or update his profile.
> 2) Giving user an option to create his own custom security questions.
> A configuration/property that would determine whether this option is  
> available to the user or not. These questions will be called as Custom  
> security questions and can entered only by a user while creating or  
> updating a profile. These questions will be available and applicable  
> only to the owner of the questions, i.e the user who create these  
> questions.
> 3) Minimum number of questions that are required to answer.
> This configuration/property would determine minimum number of  
> questions that a user must answer while creating an account and as  
> well as reclaiming an account.
> I think we can save above (#1, #2) configuration in database and  
> provide screens to configure them. IMO, these configuration can be  
> also called as a security configuration, since they are some how  
> related to security.
> At this moment I have not much idea about where these sort of  
> configuration should be saved but this could be part of the entity  
> that saves the security configurations (which does not exist at this  
> moment). In recent days certain properties are moved to entities and  
> this could certainly be the done with security properties at certain  
> point of time, until then these configuration can be kept under  
> security properties file.
> Custom Data Model:
> The new entities that would be required for this feature are following  
> (Scott did help in improving the data model few months back):
> SecurityQuestion: Security Question in the system. These questions can  
> be standard (added by admin and are visible/available to every new  
> user while creating a new account) as well as custom questions (added  
> by a user). We can differentiate between the type of questions using  
> questionTypeEnumId (STANDARD or CUSTOM) as defined in the data model  
> below.
> PartySecurityQuestion: All the questions that are related to a User.  
> They can be mix of both Standard as well as Custom.
> UserLoginSecurityQuestion: An entity to capture the answer of the  
> security question and tying it to a UserLogin very much like a  
> UserLoginSecurityGroup. When a User reclaim his account, the question  
> answered by this user would be matched with the answer of the  
> questions (corresponding to that user) in this entity.
> <entity entity-name="SecurityQuestion" package-
> name="org.ofbiz.security.login">
>       <field name="questionId" type="id-ne"></field>
>      <field name="questionTypeEnumId" type="id-ne"></field>
>       <field name="question" type="very-long" ></field>
>       <prim-key field="questionId"/>
>       <relation rel-entity-name="Enumeration" type="one" fk-
> name="SECQ_ENUM" title="QuestionType">
>         <key-map field-name="questionTypeEnumId" rel-field-
> name="enumId"/>
>       </relation>
> </entity>
>   <entity entity-name="PartySecurityQuestion" package-
> name="org.ofbiz.security.login">
>       <field name="questionId" type="id-ne"></field>
>       <field name="partyId" type="id-ne"></field>
>       <prim-key field="questionId"/>
>       <prim-key field="partyId"/>
>       <relation rel-entity-name="SecurityQuestion" type="one" fk-
> name="PTYSECQ_SECQ">
>         <key-map field-name="questionId"/>
>       </relation>
>       <relation type="one" rel-entity-name="Party" fk-
> name="PTYSECQ_PTY">
>         <key-map field-name="partyId"/>
>       </relation>
> </entity>
> <entity entity-name="UserLoginSecurityQuestion" package-
> name="org.ofbiz.security.login">
>       <field name="questionId" type="id-ne"></field>
>       <field name="userLoginId" type="id-vlong-ne"></field>
>       <field name="question" type="very-long"></field>
>       <field name="answer" type="short-varchar"></field>
>       <prim-key field="questionId"/>
>       <prim-key field="userLoginId"/>
>       <relation rel-entity-name="SecurityQuestion" type="one" fk-
> name="ULGNSECQ_SECQ">
>         <key-map field-name="questionId"/>
>       </relation>
>       <relation rel-entity-name="UserLogin" type="one" fk-
> name="ULGNSECQ_ULGN">
>         <key-map field-name="userLoginId"/>
>       </relation>
>     </entity>
> </entitymodel>
> *As per David's Comments :* 
> This looks like a great enhancement and this write-up is well thought  
> out. Thanks for sharing it and soliciting feedback.
> About the data model, I'd recommend leaving out the  
> PartySecurityQuestion entity. It introduces a dependency on the Party  
> entity which is in a higher level component, and it appears that the  
> UserLoginSecurityQuestion entity is adequate and since authentication  
> is a UserLogin thing (and not a Party thing) it is better and makes  
> more sense there anyway.
> -David 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to