- issue #408 Deleted icon is back after saving from the advanced form
- issue #417 Login page does not load after v5.4.1 update
- issue #418 Opening of the footer menu submits the advanced form
- issue #420 QR codes are cropped on small screens
- issue #421 Freeze when switching to Manage mode
- issue #423 Icon for accounts without an icon doesn't exist
- CSS styles are no longer loaded from tailwindcss.com in the
/up
view
- CSP has been turned off (for now) since it breaks the app under Google Chrome. (#417)
- Fix XSS & SSRF vulnerabilities (thx to the XBOW team).
- Content Security Policy is now available and enable by default. CSP helps to prevent or minimize the risk of certain types of security threats.
If CSP is already enable on your server, you can set theCONTENT_SECURITY_POLICY
environment variable tofalse
to disable it at 2FAuth level.
- The links in the footer (Settings, [Admin,] Sign out) have been replaced by the email address of the logged in user. Clicking on this email shows a navigation menu containing the links that were previously visible in the footer. The former display is still available if you don't like the new one, just uncheck the new Show email in footer user option in Settings. (#404)
- Administrators can now configure 2FAuth to register 2FA icons in the database (see the new Store icons to database setting in the admin panel). When enabled, existing icons in the local file system are automatically registered in the database. These files are retained and then used for caching purposes only. 2FAuth will automatically re-create cache files if they are missing, so you only have to consider the database when backing up your instance. When disabled, 2FAuth will check that all registered icons in the database have a corresponding local file before flushing out the db icons table. (#364).
- The ability to export 2FA accounts as a list of otpauth URIs (#386).
- Part of the content of some pages (such as the error page) could be hidden by the footer on small screens.
- New
otpauth
query parameter for the GET operation of path/api/v1/twofaccounts/export
to force data export as otpauth URIs instead of the 2FAuth json format.
- issue #402 Error asking me to log out when using multiple devices, pressing back logs me in anyway
- issue #396 PROXY_HEADER_FOR_IP not working as intended
- issue #397 Base table or view not found: 1146 Table '2fauth.jobs' doesn't exist
- issue #399 Cannot set CACHE_DRIVER and SESSION_DRIVER to database
- The
/up
endpoint for health checks (#271). - A user preference to close the on-screen OTP after a predefined delay
- A user preference to automatically register a 2FA account immediately after a QR code scan. When enabled, there is no need to click the Save button anymore to save the account to the database.
- An admin setting to make SSO the only authentication method available (does not apply to admins). (#368).
- The ability to assign a 2FA account to a specific group directly from the advanced form (#372).
- A new Auth tab in the admin panel to gather settings related to authentication
- Proxy support for the OpenID connector (using
PROXY_FOR_OUTGOING_REQUESTS
), thanks to @rstefko (PR #367)
A lot of new environment variables are available thanks to the Laravel 11 upgrade. They give more control over various features of the application:
ARGON_THREADS
: Number of threads that Argon2 will use to compute a hash.ARGON_TIME
: Maximum amount of time it may take to compute an Argon2 hash.ARGON_MEMORY
: Maximum memory (in kibibytes) that may be used to compute an Argon2 hash.DB_CHARSET
: The character set of the database.DB_COLLATION
: The collation of the database.HASH_DRIVER
: The hash algorithm used to hash user passwords.LOG_STACK
: The stack of log channels used when the log channel is set tostack
.LOG_DAILY_DAYS
: Number of log files to generate/rotate when using thedaily
log channel.LOG_SLACK_USERNAME
: The name of the user sending the log messages when using theslack
log channel.LOG_SLACK_EMOJI
: The Emoji code of the emoji used to illustrate log messages when using theslack
log channel.LOG_SYSLOG_FACILITY
: The syslog facility that provides a rough clue of where in a system the message originated.SESSION_TABLE
: Name of the table to be used to store sessions when using the databasesession
driver.SESSION_ENCRYPT
: Whether or not session data are encrypted before it is stored.
Please refer to the Configuration doc to find out when and how to use them.
- The Service data field is now encrypted in the database (#365).
- Upgrade to Laravel 11
- issue #347 Sort with ignore case
- issue #349 "Show QR Code" feature returns wrong QR code
- issue #360 Can’t import QR Codes from Confluence 2FA
- issue #362 Cannot use SSO if app runs in subdirectory
- New
group_id
property for POST and PUT operations of the/api/v1/twofaccounts
path
2FAuth v5.2 offers a new notification feature. Each user can now decide whether they want to receive an email after a successful login from a new device, or after a failed login.
For now, both notifications are disabled by default. Why this choice when this feature increases security? Because if the email configuration of your 2FAuth instance is not set up correctly, such login attempts will take a while (until all email sending attempts have failed).
If you never set up email sending on your instance, do it. It is the only way to recover your account, whether you use a password or a passkey to authenticate. To help you in this task, all required environment variables are described here. Since v5.1, administrators also have access to a test email button to validate the email configuration from the UI.
Notifications will be enabled by default in a future version.
Last but not least :
- When installed, 2FAuth now offers shortcuts to common actions.
- User authentication logs (See user management pages in the admin area).
- Two user preferences to control the notifications sent when authentication events occur.
- A user preference to set the timezone applied to dates and times displayed in the app.
APP_TIMEZONE
: The timezone applied to dates and times recorded to database (doc).AUTHENTICATION_LOG_RETENTION
: The authentication log retention time, in days (doc).PROXY_HEADER_FOR_IP
: Name of the HTTP header sent by a reverse proxy to pass the original visitor IP address. (doc).
MAIL_DRIVER
env var renamed toMAIL_MAILER
.
This is not a breaking change as the former name is still supported. This is just to stick to Laravel defaults.- NGINX server now also listens to ipv6 in Docker image (#336).
- issue #192
DB_DATABASE
path not respected by entrypoint script - issue #244 gauth qr code can't be imported
- issue #255 Only one Webauthn Device functioning
- issue #295 Add support for PHP 8.3
- issue #331 Last admin can demote to user, leaving the instance administratorless
/api/v1/users/{id}/authentications
GET path added (doc).
- issue #326 Admin panel not working when using security device
- issue #327 "Keep SSO registration enabled" is not saved
Hey Administrators, this release is for you, a brand new Admin Panel has arrived.
With this dedicated space, you will be able to manage admin settings previously located in the User Options view (like encryption, version check, registration). Some new settings are available to better control registration (email restrictions and self-ruling SSO) and two new features are coming: Email Configuration Testing and Cache Clearing.
But the real newness is the user management. All registered accounts are now searchable, the administrator role can be granted to any user, user access (password, personal token, security key/passphrase) can be revoked and you may also delete existing users or even create new ones.
Note that the 2FAuth API has been updated with the new paths related to user management.
- A user preference to clear search results after copying a code (#300).
- A user preference to return to default group after copying a code (#300).
- The ability to submit a migration text directly in the Import view besides TXT files & QR codes loading (#288).
- An administrator setting to restrict registration to a limited range of email addresses (#250).
- An administrator setting to keep user registration via SSO enabled (#317).
- A test email feature to ensure email sending works as expected (#307).
- A Clear cache feature to... clear the cache, but from the browser (#316).
- Hindi translation, thanks to @saxenas
- User preferences & Environment variables have been moved from the About view to the new Administration panel (#303).
- Spaces are now removed from the Secret when filling out the Advanced form (#311).
- issue #303 "Already authenticated" error message
- issue #305 403 Forbidden {message: "unauthorized"}
- issue #315 "Check now" button is untranslatable
- issue #320 app/Policies/OwnershipTrait contains a bug, i think
/api/v1/users
paths added to manage registered usersoauth_provider
property to the response body of/api/v1/user
GET path
- Japanese translation, thanks to @yheuhtozr
- issue #284 Blank screen with version 5.0.3
- issue #296 WARN Command cancelled (env=production breaks docker entrypoint)
- issue #298 WebAuthn account recovery and password recovery doesn't work. Email template broken
- issue #299 OID redirect behind reverse proxy
ASSET_URL
env variable to the same value as APP_URL
.
- The
ASSET_URL
now appears in the .env.example variables next toAPP_URL
- issue #273 Unable to automatically paste email and password in login page
- issue #276 Camera does not work
- issue #277 Import 2FAS
- issue #279 Cannot use stdout LOG_CHANNEL anymore
- issue #265 Version 5.0.1 doesn't display colored countdown segments
- issue #262 Missing custom base url support
Why? Because most of the changes are internal and come from the Vue 3 migration. I choose the long way, the one where all components had to be rewritten to adopt the new Vue Composition API and where the whole architecture has been rethought. Thus, despite all that work, almost nothing has changed on the surface.
But it was a necessary step, especially because Vue 2 will reach End Of Life on the end of 2023. Now 2FAuth is also better prepared for futur enhancements.
Ok, so is there anything new?
Yes, SSO.
Not so bad, right ?
The feature, bootstrapped by @indyKoning with an OpenID provider, has been completed and now provides a Github provider as well. I plan to add more providers, tell me in the discussion which ones you would like to see. If you need help, the docs site has been updated to guide you through the setup process.
v5 also comes with the following.
- Single Sign-On (SSO) is now available as an authentication method, with OpenID & Github. Contributed by @indyKoning (PR #243)
- The ability to reveal passwords obscured with dots. See the Options tab in Settings (#208).
- An env var to set a proxy for outgoing requests (#252).
- Automatic signed out user now lands on the Login view instead of the Autolock view (#138)
- User preferences that depend on another now appear indented
- Letters with diacritic marks are allowed in Group name (#241)
- Request body threshold increased to 10Mo in the Docker image to allow importing large file (#239)
- issue #253 2FAs exports cannot be imported
/api/v1/user
GET path addedids
andwithOtp
query parameters added to the/api/v1/twofaccounts
GET path
Full Changelog: v4.2.4...v5.0.0
- PR #242 The Docker image now embed the PostgreSQL PHP extensions, thanks to @stavros-k
- PR #235 Fix build badge broken, thanks to @sy-records
- issue #232 Vendor.js throws error making frontend unusable
- issue #233 The Close button of the 404 error page loops the page on itself
- issue #232 Vendor.js throws error making frontend unusable
- issue #227 PAT and Webauthn registration broken
- An Only for the brave feature: ctrl + click a TOTP account from the main view automatically generates a password and copies it to the clipboard without displaying it at all. Will the password be valid at the time you paste it? Nobody knows 💀
- The
MAIL_VERIFY_SSL_PEER
environment variable to disable SSL peers verification (#219). - Russian translation, but partial. Want to help complete this translation? ➡️ 2FAuth project on Crowdin.
- Navigation with the Back and Close buttons is now fully consistent with their labeling, even when browsing back through successive views using those buttons.
- The length of the email submitted during registration is now limited to 191 characters (#214).
- Upgrade to Laravel 10
- issue #213
checkForUpdate
value is missing in the About view - Inconsistent page titles
Full Changelog: v4.1.0...v4.2.0
This new version introduces a very common feature in the 2FA app world, the automatic generation and display of passwords.
Since the very beginning, 2FAuth offers an Open, Click & Get one password behavior, this is one of the main reasons why I created it. But this can be very troublesome or frustrating for users migrating from other 2FA apps as almost all of them work with an Open & Get passwords behavior, which is much more straightforward.
So this is now only a user choice as 2FAuth offers both behaviors via a user preference. Obvisouly, the Open, Click & Get one password behavior remains the default one.
- A user preference to generate and show 2FA passwords on the main view without user interaction (#153)
- An administrator setting to disable user registration (#170)
- A
2fauth:install
Artisan command to ease both initial and upgrade installation. - A spinner, during 2FA password loading - By @josh-gaby.
- Russian translation, but partial. Want to help complete this translation? ➡️ 2FAuth project on Crowdin.
- Aegis migrations with empty
name
properties are no longer rejected. Theissuer
property is then used as a fallback value. - The Docker image now embed the MySQL/MariaDB PHP extension, so it may be ready to work with.
- issue #180 OTP does not rotate while Close after copy and Copy on display is activated - By @josh-gaby
- issue #194 Container keeps trying to make connection to 172.67.161.186
- issue #134, #143, #147 Issue with some Microsoft 2FA
- issue #196 ERROR The [public/storage] link already exists
- Fix possible SQL injection in validation rule (thx @YouGina)
- Fix various possible XSS injections (thx @quirinziessler)
- issue #176 Lost keys when upgrading to 4.x whilst using proxy header authentication
- issue #174 PHP Fatal error after latest Update
Time for multi-user has arrived, here comes v4.0!
This is a first step mainly dedicated to internal changes, so the feature has been integrated gently. For now, almost nothing has changed around user management, except that registrations are opened to new users and some options are only available to the administrator.
This version also comes with nice additions. A light theme, an export feature or the support of custom base url just to name a few.
- An Export feature (accessible via the Manage view) that lets you download your 2FA data in a JSON migration file
- The Import feature accepts the 2FAuth JSON file generated by the Export feature
- Support of custom base URL. You can now install 2FAuth in a domain sub-directory, e.g
https://mydomain/2fauth/
(see Docs) - ctrl+F keyboard shortcut to focus on Search on the main view
- A light theme
- IP addresses of failed login attempts are now logged
- The Manage view layout has been rearranged: The search bar remains and the action buttons now stand in the page footer
- Password formatting is now a user option available with 3 formats: Grouping digits by pair, by trio or by half
- Failed login throttling and API calls throttling can be configured in the .env file
- Logs give more information
- Upgrade to Laravel 9.0
- The ability to set a Secret in a plain text format (in the advanced form). This was confusing and without any benefit.
- issue #166 Unable to register Nitrokey
- issue #160 Steam otpauth URI from Aegis are rejected by the Import feature
- issue #140 Bad regex for Period field (advanced form)
- issue #141 Digits field is missing in advanced form
This release is a big step towards more accessibility. Keyboard navigation is now fully supported, with clean and consistent focus, and several UI components have received relevant ARIA properties to support assistive technologies.
It also provides a rewritten Import feature that supports new export formats (Aegis and 2FAS Authenticators) and more to come.
- An option to check for new release on Github (#127)
- An option to automatically copy One-Time Passwords when they are displayed (#125)
- Aegis and 2FAS export formats are now supported by the Import feature (#128)
- (Partial) Spanish and Chinese (simplified) localizations
- Password fields can reveal the password and inform about the password strength (#124)
- issue #126 HOTP counters are not updated after OTP generation
- Autolock setup ignored when session lifetime was shorter, causing CSRF token mismatch errors
- issue #110 Can't sign in with login/password after the removal of the last webauthn device
- issue #111 Inappropriate notification about existing user during registration
- issue #113 Password reset does not work
- issue #115 WEBAUTHN_NAME .env variable set as null generates server error
- issue #109 Timeout right after login
The docker image has been upgraded as well.
- An option to fetch icons automatically from 2factorauth/twofactorauth (#99)
- An About page, accessible from the footer (#91)
- Alphabetical sorting feature (#95)
- The footer is now visible everywhere to ease access to the About page
- issue #89 Deploy to Heroku fails without
composer.lock
- issue #102 OTP generation from the Create/Edit form with invalid data should display errors
- issue #103 Google Authenticator import error: "Label contains a colon"
- issue #109 Account creation/import fails when encryption is On
- PHP 7.4 support
- Support of Google Authenticator migration data: QR codes generated by the G-Auth export feature can be flashed/uploaded to import their data into 2FAuth. (Import doc, #74)
- Partial support of STEAM TOTP. See the Steam Guard doc for detailed informations about this support (#30)
- Pages now have a unique title
- Signing in while already authenticated no longer display the "Already authenticated" error message (#88)
- The Auto lock feature now forwards to a dedicated page to ensure proper logout and prevent CSRF token mismatch error (see issue #73) that still occurred in certain situation
- issue #90 Empty page after deletion of all accounts
- issue #97 Secret's format selector should not clear the locked field in edit form
PROXY_LOGOUT_URL
environment variable to specify a custom logout url when using an auth proxy- Locked/Unlocked state for the Secret field in the 2FA account Edit form to prevent undesirable edit.
- Fix OAuth setting view returning an error when auth is handled by a proxy
- issue #57 Can't save icons or upload QR codes - Docker installation
- issue #81 Unable to create configured logger. Using emergency logger
- issue #82 Autolock feature should be disabled while auth is handled by a proxy
- issue #84 Reverse-proxy-guard authenticates request without valid headers configuration
- Mail settings section in the docker readme by @aronmal
- issue #72 2FA secret passed as plain text rejected by form validation
- issue #73 CSRF token mismatch
- issue #78 Add tags other then latest when pushing images to dockerhub
- issue #68 2fauth not run after update
- issue #71 Cannot view old TOTP entries on latest Docker Image
- Missing login information on the demo website
Finally, here is version 3.0!
This is a milestone in the 2FAuth development that greatly enhances 2FAuth under the hoods and comes with a brand new documentation.
- 2FAuth now exposes a REST API following the OpenAPI 3.1 specification that allows connexion with third parties (see the API doc)
- Support of the Web Authentication standard, aka WebAuthn, to login using a security device like a Yubikey or FaceID
- Support of authentication proxy to bypass the 2FAuth auth login
- Heroku setup to deploy 2FAuth using the Deploy to Heroku button
- Ability to delete the user account and reset 2FAuth
- The content of any non-2FA QR code can be copied or followed (in case of an HTTP link)
- PHP 8.0 support
- 2Fauth now uses the browser language preference by default.
- The current group is now clickable in the group selector
- Upgrade to Laravel 8
- issue #45 Account or Service field containing colon breaks the Test feature in the advanced form
- issue #47 Account creation fails when otpauth service parameter is missing
- issue #50 Email password reset does not work
- issue #51 Cannot delete a group with accounts (MySQL only)
- issue #52 null "Default group" setting after group delete
- issue #57 Can't save icons or upload QR codes - Docker installation
- PHP 7.3 support
- German translation, thanks to @chenmichael
- issue #20 Issues using 'Protect sensible data'
- issue #18 Install using MySQL causes exception
- issue #17 Capitalization of email address during login should not matter
- issue #15 Applied group filter is not removed if the group is deleted
- issue #14 Cache is not refreshed automatically after group changes
- Missing footer links at first start
- Missing redirection after registration
2FAuth goes to v2.0!
This release comes with multiple improvements and a lot of changes under the hood. Don't forget to backup your database before you upgrade. Have fun :)
- Add Groups to enhance accounts management
- New advanced form to define fully customized accounts without QR code
- New user option to skip the submitting page
- New DB protection option to encrypt sensitive 2FA data
- QR code generation of recorded accounts
- Support of the OTP
image
parameter when a QR code is imported
- Performance improvement thanks to data caching
- Show Register/Login forms and their links only when relevant
- Let the user choose between all available submitting methods (livescan, qrcode upload, advanced form)
- Translations are now managed on Crowdin.com/2fauth. You master some foreign languages? Why not help translate 2FAuth, your help would be welcome.
- issue #13 Long Service name push content out of viewport
- issue #11 Token generation do not loop if TOTP period is different from 30s
- issue #9 Upload QR code in standard form return a 422 missing uri field
- Upgrade to Laravel 7.0
- Drop PHP 7.2 support
- Enable the Request reset password form in Demo mode but inactivated
- Fix missing notifications in Auth views
- Application lock on security code copy or after a fixed period of inactivity
- Notify user that https is required in order to use camera streaming to flash QR code
- Notify user that the security code has been copied to clipboard when user click it
- Show selected accounts count in Manage view
- New option to show/hide icons in accounts list
- More mobile friendly Close button for modal
- More advanced notification component
- Fixed header to keep Search field and Delete button always visible
- Switches replaced by checkboxes in Settings
- Hide context around iPhone X+ notch
- Unwanted access to restricted pages as guest
- QR Code scan using live stream when a camera is detected. Previous QR Code scanner remains available as fallback method or can be forced in Settings.
- New alternative layouts: List or Grid
- Accounts can be reordered
- Notification banner (when saving settings) now has a fixed position
- Demonstration mode with restricted features and ability to reset content with an artisan command
- Option to close token popup when the code is pasted (by clicking/taping on it)
- Options default values can now be set in config/app
- Generated assets are now part of the repo to ease deployement
- Option labels attached to wrong checkboxes