{"id":152665,"date":"2022-01-28T05:14:31","date_gmt":"2022-01-28T05:14:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/webauthn-provider-for-two-factor\/"},"modified":"2026-03-12T08:17:46","modified_gmt":"2026-03-12T08:17:46","slug":"two-factor-provider-webauthn","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/two-factor-provider-webauthn\/","author":16680021,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.6.1","stable_tag":"2.6.1","tested":"6.9.4","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"WebAuthn Provider for Two Factor","header_author":"Volodymyr Kolesnykov","header_description":"WebAuthn Provider for Two Factor plugin.","assets_banners_color":"0e2c57","last_updated":"2026-03-12 08:17:46","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/donate\/?hosted_button_id=SAG6877JDJ3KU","header_plugin_uri":"","header_author_uri":"","rating":4.6,"author_block_rating":0,"active_installs":1000,"downloads":36330,"num_ratings":11,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"volodymyrkolesnykov","date":"2022-01-28 05:14:13"},"1.0.1":{"tag":"1.0.1","author":"volodymyrkolesnykov","date":"2022-01-28 05:35:55"},"1.0.10":{"tag":"1.0.10","author":"volodymyrkolesnykov","date":"2022-09-29 05:12:02"},"1.0.2":{"tag":"1.0.2","author":"volodymyrkolesnykov","date":"2022-02-05 06:46:34"},"1.0.3":{"tag":"1.0.3","author":"volodymyrkolesnykov","date":"2022-02-21 19:48:21"},"1.0.4":{"tag":"1.0.4","author":"volodymyrkolesnykov","date":"2022-05-17 08:18:04"},"1.0.5":{"tag":"1.0.5","author":"volodymyrkolesnykov","date":"2022-05-17 08:25:52"},"1.0.6":{"tag":"1.0.6","author":"volodymyrkolesnykov","date":"2022-06-10 11:03:24"},"1.0.6.1":{"tag":"1.0.6.1","author":"volodymyrkolesnykov","date":"2022-06-10 11:31:23"},"1.0.7":{"tag":"1.0.7","author":"volodymyrkolesnykov","date":"2022-06-19 01:53:00"},"1.0.7.1":{"tag":"1.0.7.1","author":"volodymyrkolesnykov","date":"2022-06-19 01:56:26"},"1.0.8":{"tag":"1.0.8","author":"volodymyrkolesnykov","date":"2022-06-22 01:56:18"},"1.0.9":{"tag":"1.0.9","author":"volodymyrkolesnykov","date":"2022-09-22 06:07:41"},"2.0.0":{"tag":"2.0.0","author":"volodymyrkolesnykov","date":"2022-10-14 01:57:57"},"2.0.1":{"tag":"2.0.1","author":"volodymyrkolesnykov","date":"2022-10-26 04:43:37"},"2.0.2":{"tag":"2.0.2","author":"volodymyrkolesnykov","date":"2023-05-08 15:45:47"},"2.0.3":{"tag":"2.0.3","author":"volodymyrkolesnykov","date":"2023-05-08 16:43:29"},"2.1.0":{"tag":"2.1.0","author":"volodymyrkolesnykov","date":"2023-05-09 14:52:33"},"2.2.0":{"tag":"2.2.0","author":"volodymyrkolesnykov","date":"2024-05-05 03:42:18"},"2.3.0":{"tag":"2.3.0","author":"volodymyrkolesnykov","date":"2024-08-02 19:35:34"},"2.4.0":{"tag":"2.4.0","author":"volodymyrkolesnykov","date":"2024-08-05 18:14:03"},"2.4.1":{"tag":"2.4.1","author":"volodymyrkolesnykov","date":"2024-09-09 08:22:04"},"2.5.0":{"tag":"2.5.0","author":"volodymyrkolesnykov","date":"2024-09-12 09:28:21"},"2.5.1":{"tag":"2.5.1","author":"volodymyrkolesnykov","date":"2025-01-16 11:18:16"},"2.5.2":{"tag":"2.5.2","author":"volodymyrkolesnykov","date":"2025-01-17 11:44:02"},"2.5.3":{"tag":"2.5.3","author":"volodymyrkolesnykov","date":"2025-01-18 18:53:02"},"2.5.4":{"tag":"2.5.4","author":"volodymyrkolesnykov","date":"2025-06-24 07:39:00"},"2.5.5":{"tag":"2.5.5","author":"volodymyrkolesnykov","date":"2026-02-22 17:27:49"},"2.5.6":{"tag":"2.5.6","author":"volodymyrkolesnykov","date":"2026-02-23 13:43:12"},"2.6.0":{"tag":"2.6.0","author":"volodymyrkolesnykov","date":"2026-03-01 08:50:13"},"2.6.1":{"tag":"2.6.1","author":"volodymyrkolesnykov","date":"2026-03-12 08:17:46"}},"upgrade_notice":{"":"<p>None yet.<\/p>"},"ratings":{"1":0,"2":1,"3":0,"4":1,"5":9},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":2909612,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":2909612,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":2909612,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":2909612,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":2909612,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.10","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.6.1","1.0.7","1.0.7.1","1.0.8","1.0.9","2.0.0","2.0.1","2.0.2","2.0.3","2.1.0","2.2.0","2.3.0","2.4.0","2.4.1","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.6.0","2.6.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":2667825,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":2667825,"resolution":"2","location":"assets","locale":""}},"screenshots":{"1":"User profile settings showing the registered security keys.","2":"Plugin settings page."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9211,602,600,9217,183349],"plugin_category":[38,54],"plugin_contributors":[207190],"plugin_business_model":[],"class_list":["post-152665","plugin","type-plugin","status-publish","hentry","plugin_tags-2fa","plugin_tags-login","plugin_tags-security","plugin_tags-two-factor","plugin_tags-webauthn","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_contributors-volodymyrkolesnykov","plugin_committers-volodymyrkolesnykov"],"banners":{"banner":"https:\/\/ps.w.org\/two-factor-provider-webauthn\/assets\/banner-772x250.jpg?rev=2909612","banner_2x":"https:\/\/ps.w.org\/two-factor-provider-webauthn\/assets\/banner-1544x500.jpg?rev=2909612","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/two-factor-provider-webauthn\/assets\/icon.svg?rev=2909612","icon":"https:\/\/ps.w.org\/two-factor-provider-webauthn\/assets\/icon.svg?rev=2909612","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/two-factor-provider-webauthn\/assets\/screenshot-1.png?rev=2667825","caption":"User profile settings showing the registered security keys."},{"src":"https:\/\/ps.w.org\/two-factor-provider-webauthn\/assets\/screenshot-2.png?rev=2667825","caption":"Plugin settings page."}],"raw_content":"<!--section=description-->\n<p>This plugin adds WebAuthn and passkey support to the <a href=\"https:\/\/wordpress.org\/plugins\/two-factor\/\">Two Factor<\/a> plugin, providing a modern, secure authentication method.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Support for WebAuthn and passkeys (Windows Hello, Touch ID, YubiKeys, etc.)<\/li>\n<li>Backward compatibility with previously registered U2F security keys<\/li>\n<li>User-friendly settings and seamless authentication experience<\/li>\n<li>Customizable error logging and behavior via action hooks<\/li>\n<li>Works with the Two Factor plugin for flexible 2FA authentication<\/li>\n<\/ul>\n\n<p>The plugin enables users to register and use hardware security keys and platform authenticators for stronger protection against password-based attacks and phishing.<\/p>\n\n<p>Notes:<\/p>\n\n<ul>\n<li>please use <a href=\"https:\/\/github.com\/sjinks\/wp-two-factor-provider-webauthn\/issues\">GitHub issues<\/a> to report bugs;<\/li>\n<li>the full source code with all development files is available on <a href=\"https:\/\/github.com\/sjinks\/wp-two-factor-provider-webauthn\">GitHub<\/a>.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<p>Be the first to ask.<\/p>\n\n<!--section=changelog-->\n<h4>2.6.1<\/h4>\n\n<ul>\n<li>Compatibility with WordPress 6.9.4<\/li>\n<li>Refactor key management user interface<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>Better support for passkeys<\/li>\n<li>Add hooks for logging errors<\/li>\n<li>Make plugin options more user-friendly<\/li>\n<li>Always show Retry button<\/li>\n<li>Update translations<\/li>\n<\/ul>\n\n<h4>2.5.6<\/h4>\n\n<ul>\n<li>Fix authentication bypass with malformed request<\/li>\n<li>Additional hardening<\/li>\n<\/ul>\n\n<h4>2.5.5<\/h4>\n\n<ul>\n<li>Compatibility with WordPress 6.9.1<\/li>\n<\/ul>\n\n<h4>2.5.4<\/h4>\n\n<ul>\n<li>Platform requirements updated to PHP 8.1 and WordPress 6.0 (although the plugin still should work with older versions of PHP and WordPress)<\/li>\n<li>GH-1008: better integration with Two Factor 0.13.0<\/li>\n<\/ul>\n\n<h4>2.5.3<\/h4>\n\n<ul>\n<li>Restore <code>WebAuthn_Provider::get_instance()<\/code> because WPVIP has an ancient version of Two Factor<\/li>\n<\/ul>\n\n<h4>2.5.2<\/h4>\n\n<ul>\n<li>Fix the conflict when another package loads a library that has <code>autoload.files<\/code> key (see https:\/\/github.com\/sjinks\/wp-two-factor-provider-webauthn\/pull\/980)<\/li>\n<\/ul>\n\n<h4>2.5.1<\/h4>\n\n<ul>\n<li>GH-898: do not show the UI if the plugin has failed to install its tables<\/li>\n<li>GH-972: do not show the profile UI if the provider is disabled<\/li>\n<li>drop official PHP 7.4 support<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>iCloud support for Firefox (props dd32)<\/li>\n<\/ul>\n\n<h4>2.4.1<\/h4>\n\n<ul>\n<li>GH-541: fix issues with YubiKeys (backported a patch by Markus Bauer from https:\/\/github.com\/madwizard-org\/webauthn-server\/pull\/23)<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>GH-830: introduce <code>webauthn_register_key_use_nicename<\/code> filter (props kat3samsin)<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>GH-827: Add <code>webauthn_register_key_suppress_output<\/code> filter<\/li>\n<li>GH-826: Add <code>webauthn_app_id<\/code> filter to customize U2F AppID<\/li>\n<li>GH-824: Initialize <code>wpdb<\/code> properties as early as possible<\/li>\n<li>Update <code>madwizard\/webauthn<\/code> to 0.10.0<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Do not create user handles if they are not needed<\/li>\n<li>Add a hook to customize WebAuthN server<\/li>\n<li>Update dependencies<\/li>\n<li>Refactor tests<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>GH-462: Use correct user ID when editing a user<\/li>\n<li>GH-456: Set relying party ID to COOKIE_DOMAIN if it is available (props dd32)<\/li>\n<li>Allow only for network-wide plugin activation (to match Two Factor)<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Update translations (thank you, Copilot)<\/li>\n<li>Add Ukrainian translation (thank you, Copilot)<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Update madwizard\/webauthn to 0.9.0<\/li>\n<li>Update development dependencies<\/li>\n<li>Update E2E tests<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>GH-295: fix client extensions validation<\/li>\n<li>Update development dependencies<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Put external dependencies into a unique namespace (GH-36, GH-53, GH-236)<\/li>\n<li>Update madwizard\/webauthn to 0.8.0<\/li>\n<li>Update development dependencies<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Add zh-tw translations (props <a href=\"https:\/\/profiles.wordpress.org\/alex1114\/\">Chun-Chih Cheng<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/alexclassroom\/\">Alex Lion<\/a>)<\/li>\n<li>GH-215, GH-33: Fix \"Unable to save the key to the database\" error for long public keys<\/li>\n<li>Update development dependencies<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Update madwizard\/webauthn to 0.8.0<\/li>\n<li>Update development dependencies<\/li>\n<li>Add debug mode (activated with <code>define( 'DEBUG_TFPWA', true );<\/code>)<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Security: Update guzzlehttp\/guzzle to 7.4.5 (fix <a href=\"https:\/\/github.com\/advisories\/GHSA-25mq-v84q-4j7r\">CVE-2022-31090<\/a> and <a href=\"https:\/\/github.com\/advisories\/GHSA-q559-8m2m-g699\">CVE-2022-31091<\/a>)<\/li>\n<li>Do not load the plugin while WordPress is being installed<\/li>\n<\/ul>\n\n<h4>1.0.7.1<\/h4>\n\n<ul>\n<li>Fix deployment issue. It's time to automate the process<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>GH-130: fix Network Installation issue<\/li>\n<li>Update development dependencies<\/li>\n<li>Add security-related workflows to CI<\/li>\n<li>Improve tests<\/li>\n<\/ul>\n\n<h4>1.0.6.1<\/h4>\n\n<ul>\n<li>Fix deployment issue<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>GH-93: remove unnecessary <code>required<\/code> attribute from <code>webauthn_key_name<\/code><\/li>\n<li>Security: Update guzzlehttp\/guzzle to 7.4.4 (fix CVE-2022-31042 and CVE-2022-31043)<\/li>\n<li>Update development dependencies<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Synchronize plugin version across all files<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Update translations<\/li>\n<li>GH-93: add an option to turn off the old U2F provider<\/li>\n<li>Update dependencies<\/li>\n<li>Add more E2E tests<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>GH-33: increase length of credential_id column to solve issues with Chrome on Mac<\/li>\n<li>GH-38: fix bugs preventing plugin uninstallation<\/li>\n<li>Make Settings::offsetGet() compatible with PHP 8.1<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added E2E tests<\/li>\n<li>UI fixes<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"WebAuthn authentication provider for Two Factor plugin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/152665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=152665"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/volodymyrkolesnykov"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=152665"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=152665"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=152665"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=152665"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=152665"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=152665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}