- How will the user log in?
- Username & password
- One time password/token
- How the user get the token/password? How is the user authenticated? (E.g. sent to verified email address)
- What third parties we want to support? (Google, Facebook, GitHub, ...)
- How does the user change his/her password?
- Logged-in user in its profile
- Forgotten password
- How is the user authenticated to request the change?
- How is the user authenticated to actually change the password?
- Do we want to support Single Sign-On (SSO)?
- If so, what systems are involved?
- Who and how manages adding/removing involved systems?
- Do we want to support 2FA/MFA?
- If so, would it be required for everyone?
- When and how does the user set it up?
- How can the user cancel it?
- How can a user recover the account when the device/keys are lost?
- How can the user logout?
- How does it work for the current session?
- How does it work for another sessions (on another device)?
- How long is expiration of the sessions?
- Does it expire after web browser tab closing?
- Is the expiration prolonged after each action in the app?
- How will the user registration work?
- Will the user use self-registration?
- Will the user automatically register after an action (eg. place an order, write a comment)?
- Do we want to manually register users by already existing (and logged-in) user?
- Do we want to manually register users by administrator of the system?
- When and how does the user set the first password if we allow username and password login?
- When does the user give a consent (eg. terms of use, privacy policy)?
- How and when does the user give a new consent when conditions change and the new consent is needed?
- Can the user use the system without giving a consent? To what extent? And how long?
- How is it different for a user who given consent before but did not for changed conditions?
- Is it necessary to activate an account/validate an email address?
- Why? What is it good for?
- If yes, when and how is it done?
- Can the user use the system without confirmation? To what extent? And how long?
- How do we authenticate users to activate an account/confirm an email address?
- How does the user request the activation of the account/confirmation of the email address again if the information for activation/validation has not been received?
- What will happen when the user changes email address?
- How can a user cancel or delete their account?
- How does it differ if the user asks for deletion under the GDPR?
- How do we manage authentication-related emails?
- How do we manage the design?
- How do we manage the wording?
- How do we address email localization?
- Authorization
- Who, where and how defines the authorization rules?
- Who, where, and how manages authorization rules relations to users?
- How does registering a new client work?
- How does deactivating/deleting a client work?
- What are the implications for existing users related to the client?
- What happens to users logged-in to the client?
- How are authorization rules for clients managed?
- Who, when and how defines client authorization rules?
- What rules are automatically approved after client registration?
- How the client requests changes in approved client authorization rules?
- How does it differ for the registration and for the following changes?
- How does it affect existing users?
- How does it differ for removing rules and adding rules?
- Do we want to support the possibility for each client to have multiple sub-clients (eg. iOS, Android, Web)?
- If so, what are their limitations?
- How does it change from the main client?
- How and where the user denies access to previously approved clients?
- How and where the user revokes individual "sessions" within one client?
- How long is the expiration for tokens?
- Access token
- Refresh token
- Authentication code
- Do we want to use Json Web Tokens (JWT)?
- What implications (positive and negative) does it have to the rest of the system?