A colleague and I are discussing how to implement "Lost Password" feature on our company's proprietary web application.
We have already decided that to create an account there will be three required elements
1) Screen Name
2) Email Address (used for logging in)
1) Password (obviously, also used for logging in. Stored as one-way hash)
Once we have that info, the user attempting to sign up will be sent a verification email with a link and an activation key. To activate their account they will need to follow the link, enter the activation key, and re-enter their email and password. If everything matches then presto! A new user account is activated.
After the account is activated, lets say that the user forgets their password. We have two ideas for how to handle this situation.
This would require secret question and secret answer data to be collected during signup.
One concern that we have is that (internal to our company) multiple employees would use a single login account. Some of us think that eliminates the secret question method as an option.
However, a password sent by email (temporary or not) would be vulnerable as email is not secure.
Considering internal operational constraints (multiple people to single login) which of these ideas would be the most secure and user-friendly option? Or, are neither adequate?
Could the stack overflow help me out by evaluating the answers? There are few opinions expressed below, but there isn't any indication from SO as to the answers' quality.
In my systems when someone requests a lost password I:
If all those conditions are true, I let them create a new password.
Generally speaking, though email is not terribly secure, if someones email account is compromised, you already have a huge security hole, but by telling them they only have 30 minutes to re-activate their accounts, it cuts down on the window when someone could misuse the information: it can only be used once, it goes to a known good email address, and it can only be used for 30 minutes...for the type of systems I have done, this is secure enough without burdening the users (or admins) too much.