Difference between revisions of "Password reset strategy"
From DarkWiki
(→Process) |
(→Password reset URL) |
||
| Line 41: | Line 41: | ||
<pre> | <pre> | ||
| − | <scheme>://<host>/security/resetPassword/<userId>/< | + | <scheme>://<host>/security/resetPassword/<userId>/<timestamp>/<hmac> |
</pre> | </pre> | ||
| + | |||
| + | Where: | ||
| + | |||
| + | * ''userId'' is the UUID associated with the user's account - it is not the username used to login. | ||
| + | * ''timestamp'' is the time that the password reset was requested. | ||
| + | * ''hmac'' is the [https://en.wikipedia.org/wiki/Hash-based_message_authentication_code HMAC] encoding the other two variables, thus preventing their alteration. | ||
Revision as of 14:57, 10 August 2017
Introduction
As part of standard operating procedure, the system needs to help users who have forgotten their password or user id in a simple and secure fashion, without any interaction of support staff.
Common attack vectors
- Password resets issued by hacker.
- Forged mails with reset links in.
Aims
- Users do not like automatically generated passwords
- Sending a new password or a one-time password/code in an email is insecure
- The password reset link inside the email will only be used:
- For a short period of time (e.g. 48 hours)
- Until such time as the password has been reset
- The password reset link will be secure, and any modification must be detectable
- The user's mailbox may be compromised in the future; the link must not be modifiable (e.g. by changing the username, timestamp etc)
Process
There are two possible initiators:
- The user has forgotten their user name, or
- The user has forgotten their password.
We do not need to care about which piece of information they have forgotten. We will use their registered email address to send them a link allowing them to set their password.
- User clicks "I've forgotten my password"
- The user is prompted for their email address.
- A password-reset URL is generated.
- The URL is emailed to the user's mailbox.
- The user clicks the link
- The URL is validated by the server
- The user is presented with the customary two-password-boxes
- The new password is saved
Password reset URL
The password URL comprises the following information:
<scheme>://<host>/security/resetPassword/<userId>/<timestamp>/<hmac>
Where:
- userId is the UUID associated with the user's account - it is not the username used to login.
- timestamp is the time that the password reset was requested.
- hmac is the HMAC encoding the other two variables, thus preventing their alteration.