Wiki source code of XWiki Two-Factor Authentication
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.18 | 1 | {{velocity}} |
| 2 | #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome')) | ||
| 3 | #set ($discard = $xwiki.ssx.use('products.WebHome')) | ||
| |
6.11 | 4 | |
| 5 | #set ($mainCapabilityItems = [{ | ||
| 6 | 'title': 'Second verification step', | ||
| 7 | 'icon': 'key', | ||
| 8 | 'content': 'After the normal username and password check, users complete an additional verification step before accessing XWiki.' | ||
| 9 | },{ | ||
| 10 | 'title': 'Authenticator app codes', | ||
| 11 | 'icon': 'mobile', | ||
| 12 | 'content': 'Users can verify access with time-based TOTP codes generated by authenticator applications on mobile or desktop devices.' | ||
| 13 | },{ | ||
| 14 | 'title': 'Email verification codes', | ||
| 15 | 'icon': 'envelope-o', | ||
| 16 | 'content': 'Users can receive one-time verification codes by email when an authenticator app is not available or preferred.' | ||
| 17 | }]) | ||
| 18 | |||
| 19 | #set ($useCaseItems = [ | ||
| 20 | 'Protecting administrator accounts', | ||
| 21 | 'Improving access security for internal knowledge bases', | ||
| 22 | 'Securing private documentation platforms and intranets', | ||
| 23 | 'Supporting remote-user access policies', | ||
| 24 | 'Strengthening customer or partner portals', | ||
| 25 | 'Preparing for security reviews or broader compliance initiatives' | ||
| 26 | ]) | ||
| 27 | |||
| 28 | #set ($adminCapabilityItems = [ | ||
| 29 | 'Require MFA for all users', | ||
| 30 | 'Define the issuer name displayed in authenticator applications', | ||
| 31 | 'Configure trusted-device duration', | ||
| 32 | 'Configure how many recovery codes are generated', | ||
| 33 | 'Reset a user’s MFA setup when needed', | ||
| 34 | 'Review MFA adoption from the administration overview' | ||
| 35 | ]) | ||
| 36 | |||
| 37 | #set ($overviewItems = [ | ||
| 38 | 'Number of users scanned', | ||
| 39 | 'Users with MFA configured', | ||
| 40 | 'Users without MFA configured', | ||
| 41 | 'Users with trusted devices', | ||
| 42 | 'Recovery-code status', | ||
| 43 | 'Unused and total recovery-code count', | ||
| 44 | 'Trusted-device count' | ||
| 45 | ]) | ||
| 46 | |||
| 47 | #set ($profileItems = [ | ||
| 48 | 'Configure MFA', | ||
| 49 | 'Review MFA status', | ||
| 50 | 'Generate or regenerate recovery codes', | ||
| 51 | 'Review trusted devices', | ||
| 52 | 'Remove individual trusted devices', | ||
| 53 | 'Remove all trusted devices', | ||
| 54 | 'Reset MFA setup' | ||
| 55 | ]) | ||
| 56 | |||
| 57 | #set ($rolloutItems = [{ | ||
| 58 | 'title': 'Install and configure the extension', | ||
| 59 | 'content': 'Start by validating compatibility with the current XWiki version and authentication setup.' | ||
| 60 | },{ | ||
| 61 | 'title': 'Define the MFA policy', | ||
| 62 | 'content': 'Decide whether MFA should be optional, required for administrators, or required for all users.' | ||
| 63 | },{ | ||
| 64 | 'title': 'Configure recovery and trusted devices', | ||
| 65 | 'content': 'Choose whether users can rely on recovery codes and whether trusted browsers or devices are allowed.' | ||
| 66 | },{ | ||
| 67 | 'title': 'Test with a pilot group', | ||
| 68 | 'content': 'Validate the setup and login flow with administrators or a small group before wider rollout.' | ||
| 69 | },{ | ||
| 70 | 'title': 'Communicate the user process', | ||
| 71 | 'content': 'Explain how users should configure MFA, store recovery codes and manage trusted devices.' | ||
| 72 | },{ | ||
| 73 | 'title': 'Monitor adoption', | ||
| 74 | 'content': 'Use the administration overview to identify users who still need to configure MFA.' | ||
| 75 | }]) | ||
| 76 | |||
| |
1.18 | 77 | {{html clean="false"}} |
| |
1.2 | 78 | |
| |
6.11 | 79 | <section class="hero hero-centered" aria-labelledby="product-title"> |
| |
1.18 | 80 | <div class="container hero-inner"> |
| 81 | <div class="hero-kicker"> | ||
| |
1.2 | 82 | <i class="fa fa-lock" aria-hidden="true"></i> |
| |
1.18 | 83 | XWiki 2FA and MFA |
| |
1.2 | 84 | </div> |
| 85 | |||
| |
1.18 | 86 | <h1 id="product-title">XWiki Two-Factor Authentication</h1> |
| |
1.2 | 87 | |
| |
1.18 | 88 | <p class="lead"> |
| |
6.2 | 89 | Protect XWiki logins with a second verification step using authenticator app codes, |
| 90 | email verification codes, or both. | ||
| |
1.2 | 91 | </p> |
| 92 | |||
| |
1.18 | 93 | <div class="hero-actions"> |
| 94 | <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Ask about this extension</a> | ||
| 95 | <a class="btn btn-secondary" href="$xwiki.getURL('products.WebHome')">View all products</a> | ||
| 96 | </div> | ||
| 97 | </div> | ||
| 98 | </section> | ||
| 99 | |||
| 100 | <section aria-labelledby="overview-title"> | ||
| 101 | <div class="container"> | ||
| 102 | <div class="product-layout"> | ||
| 103 | <article class="product-summary-card"> | ||
| 104 | <h2 id="overview-title">Two-factor authentication built into XWiki</h2> | ||
| 105 | |||
| 106 | <p> | ||
| |
6.11 | 107 | XWiki Two-Factor Authentication adds MFA/2FA support to the standard XWiki login flow. |
| 108 | Users continue to sign in with their normal username and password, then confirm access with | ||
| 109 | an additional verification method. | ||
| |
1.18 | 110 | </p> |
| 111 | |||
| 112 | <p> | ||
| |
6.11 | 113 | The extension supports authenticator app codes, email-delivered verification codes, or a combined |
| 114 | setup where both methods are required. It improves account protection without replacing the familiar | ||
| 115 | XWiki authentication experience. | ||
| |
1.18 | 116 | </p> |
| 117 | |||
| 118 | <p> | ||
| |
6.11 | 119 | It is designed for organizations that use XWiki for internal knowledge bases, intranets, |
| 120 | documentation platforms, customer portals, workflows or other business-critical applications. | ||
| |
1.18 | 121 | </p> |
| 122 | </article> | ||
| 123 | |||
| 124 | <aside class="product-info-card" aria-labelledby="quick-facts-title"> | ||
| 125 | <h3 id="quick-facts-title">Quick facts</h3> | ||
| 126 | <ul> | ||
| 127 | <li>Works with the standard XWiki login flow</li> | ||
| 128 | <li>Supports authenticator app codes using TOTP</li> | ||
| 129 | <li>Supports email-delivered one-time verification codes</li> | ||
| 130 | <li>Can require app code and email code together</li> | ||
| |
6.11 | 131 | <li>Includes recovery codes for backup access</li> |
| |
1.18 | 132 | <li>Can remember trusted browsers or devices</li> |
| 133 | <li>Includes administration and user setup controls</li> | ||
| 134 | </ul> | ||
| 135 | </aside> | ||
| 136 | </div> | ||
| 137 | </div> | ||
| 138 | </section> | ||
| 139 | |||
| 140 | <section aria-labelledby="features-title"> | ||
| 141 | <div class="container"> | ||
| 142 | <h2 id="features-title">Main capabilities</h2> | ||
| 143 | |||
| 144 | <p class="section-intro"> | ||
| |
6.11 | 145 | A focused set of MFA/2FA features for stronger XWiki account protection without changing |
| 146 | the standard login experience. | ||
| |
1.2 | 147 | </p> |
| |
1.18 | 148 | |
| 149 | <div class="product-feature-grid"> | ||
| |
6.11 | 150 | #foreach ($entry in $mainCapabilityItems) |
| 151 | <article class="product-feature"> | ||
| 152 | <div class="card-heading"> | ||
| 153 | <div class="feature-icon"> | ||
| 154 | <i class="fa fa-$entry.icon" aria-hidden="true"></i> | ||
| 155 | </div> | ||
| 156 | <h3>$entry.title</h3> | ||
| |
6.7 | 157 | </div> |
| 158 | |||
| |
6.11 | 159 | <p>$entry.content</p> |
| 160 | </article> | ||
| 161 | #end | ||
| 162 | </div> | ||
| 163 | </div> | ||
| 164 | </section> | ||
| 165 | |||
| 166 | <section class="product-section-muted" aria-labelledby="security-title"> | ||
| 167 | <div class="container"> | ||
| 168 | <div class="product-layout"> | ||
| 169 | <article class="product-summary-card"> | ||
| 170 | <h2 id="security-title">Useful for XWiki security and NIS 2 readiness</h2> | ||
| 171 | |||
| |
1.18 | 172 | <p> |
| |
6.11 | 173 | Many organizations need multi-factor authentication for enterprise software, including internal |
| 174 | knowledge bases, intranets, documentation platforms and systems containing operational procedures | ||
| 175 | or sensitive business information. | ||
| |
1.18 | 176 | </p> |
| |
6.11 | 177 | |
| 178 | <p> | ||
| 179 | For organizations using XWiki, adding two-factor authentication directly to the standard login flow | ||
| 180 | can help close a practical access-control gap. It can be useful for administrator accounts, | ||
| 181 | remote users, private knowledge bases and broader security readiness initiatives such as NIS 2 preparation. | ||
| 182 | </p> | ||
| 183 | |||
| 184 | <p> | ||
| 185 | This extension is not a complete compliance solution on its own, but it provides an important | ||
| 186 | technical control for protecting access to XWiki. | ||
| 187 | </p> | ||
| |
1.18 | 188 | </article> |
| 189 | |||
| |
6.11 | 190 | <aside class="product-info-card" aria-labelledby="use-cases-title"> |
| 191 | <h3 id="use-cases-title">Typical use cases</h3> | ||
| 192 | <ul> | ||
| 193 | #foreach ($item in $useCaseItems) | ||
| 194 | <li>$item</li> | ||
| 195 | #end | ||
| 196 | </ul> | ||
| 197 | </aside> | ||
| 198 | </div> | ||
| 199 | </div> | ||
| 200 | </section> | ||
| |
6.7 | 201 | |
| |
6.11 | 202 | <section aria-labelledby="admin-title"> |
| 203 | <div class="container"> | ||
| 204 | <div class="product-layout"> | ||
| 205 | <article class="product-summary-card"> | ||
| 206 | <h2 id="admin-title">Administrator configuration</h2> | ||
| 207 | |||
| |
1.18 | 208 | <p> |
| |
6.11 | 209 | Administrators configure MFA from the XWiki Administration section. The configuration is intentionally |
| 210 | simple, so the rollout can be adapted to the organization’s security policy and user base. | ||
| |
1.18 | 211 | </p> |
| |
6.11 | 212 | |
| 213 | <p> | ||
| 214 | MFA can be optional or required for all users. When MFA is required, users who have not configured it yet | ||
| 215 | are guided through the setup flow from their profile or during login. | ||
| 216 | </p> | ||
| 217 | |||
| 218 | <p> | ||
| 219 | If trusted devices should not be allowed, the trusted-device duration can be set to 0. | ||
| 220 | If recovery codes should not be available, the recovery-code number can be set to 0. | ||
| 221 | </p> | ||
| |
1.18 | 222 | </article> |
| 223 | |||
| |
6.11 | 224 | <aside class="product-info-card" aria-labelledby="admin-capabilities-title"> |
| 225 | <h3 id="admin-capabilities-title">Administrators can</h3> | ||
| 226 | <ul> | ||
| 227 | #foreach ($item in $adminCapabilityItems) | ||
| 228 | <li>$item</li> | ||
| 229 | #end | ||
| 230 | </ul> | ||
| 231 | </aside> | ||
| 232 | </div> | ||
| 233 | </div> | ||
| 234 | </section> | ||
| |
6.7 | 235 | |
| |
6.11 | 236 | {{/html}} |
| 237 | |||
| 238 | {{gallery}} | ||
| 239 | [[image:mfa-admin-configuration.png]] | ||
| 240 | {{/gallery}} | ||
| 241 | |||
| 242 | {{html clean="false"}} | ||
| 243 | |||
| 244 | <section aria-labelledby="admin-overview-title"> | ||
| 245 | <div class="container"> | ||
| 246 | <div class="product-layout"> | ||
| 247 | <article class="product-summary-card"> | ||
| 248 | <h2 id="admin-overview-title">MFA overview for administrators</h2> | ||
| 249 | |||
| |
1.18 | 250 | <p> |
| |
6.11 | 251 | The Administration section includes an MFA overview page that helps administrators understand adoption |
| 252 | and usage across the wiki. | ||
| |
1.18 | 253 | </p> |
| |
6.11 | 254 | |
| 255 | <p> | ||
| 256 | The overview displays summary indicators and a Live Data table with MFA-related information. | ||
| 257 | The table is filterable and sortable, making it suitable for installations with many users. | ||
| 258 | </p> | ||
| |
1.18 | 259 | </article> |
| |
6.11 | 260 | |
| 261 | <aside class="product-info-card" aria-labelledby="overview-data-title"> | ||
| 262 | <h3 id="overview-data-title">The overview can show</h3> | ||
| 263 | <ul> | ||
| 264 | #foreach ($item in $overviewItems) | ||
| 265 | <li>$item</li> | ||
| 266 | #end | ||
| 267 | </ul> | ||
| 268 | </aside> | ||
| |
1.18 | 269 | </div> |
| |
1.2 | 270 | </div> |
| |
1.18 | 271 | </section> |
| 272 | |||
| |
6.11 | 273 | {{/html}} |
| 274 | |||
| 275 | {{gallery}} | ||
| 276 | [[image:mfa-admin-overview.png]] | ||
| 277 | {{/gallery}} | ||
| 278 | |||
| 279 | {{html clean="false"}} | ||
| 280 | |||
| 281 | <section class="product-section-muted" aria-labelledby="user-setup-title"> | ||
| |
1.18 | 282 | <div class="container"> |
| 283 | <div class="product-layout"> | ||
| 284 | <article class="product-summary-card"> | ||
| |
6.11 | 285 | <h2 id="user-setup-title">User setup experience</h2> |
| |
1.18 | 286 | |
| 287 | <p> | ||
| |
6.11 | 288 | Users can configure MFA from their profile page. During setup, the user scans a QR code with |
| 289 | an authenticator application. | ||
| |
1.18 | 290 | </p> |
| 291 | |||
| 292 | <p> | ||
| |
6.11 | 293 | If scanning is not possible, the setup page also provides the account name and secret key that can be |
| 294 | entered manually. After the generated verification code is entered successfully, MFA is activated for | ||
| 295 | the user account. | ||
| |
1.18 | 296 | </p> |
| |
6.11 | 297 | </article> |
| |
1.18 | 298 | |
| |
6.11 | 299 | <aside class="product-info-card" aria-labelledby="login-flow-title"> |
| 300 | <h3 id="login-flow-title">Login flow</h3> | ||
| 301 | <ul> | ||
| 302 | <li>User signs in with the normal XWiki credentials</li> | ||
| 303 | <li>XWiki asks for the configured verification code</li> | ||
| 304 | <li>The user enters the app code, email code, or both</li> | ||
| 305 | <li>A recovery code can be used when enabled and available</li> | ||
| 306 | <li>A trusted browser or device can be remembered when allowed</li> | ||
| 307 | </ul> | ||
| 308 | </aside> | ||
| 309 | </div> | ||
| 310 | </div> | ||
| 311 | </section> | ||
| 312 | |||
| 313 | {{/html}} | ||
| 314 | |||
| 315 | {{gallery}} | ||
| 316 | [[image:mfa-user-setup-qr.png]] | ||
| 317 | [[image:mfa-login-verification.png]] | ||
| 318 | {{/gallery}} | ||
| 319 | |||
| 320 | {{html clean="false"}} | ||
| 321 | |||
| 322 | <section aria-labelledby="recovery-title"> | ||
| 323 | <div class="container"> | ||
| 324 | <div class="product-layout"> | ||
| 325 | <article class="product-summary-card"> | ||
| 326 | <h2 id="recovery-title">Recovery codes</h2> | ||
| 327 | |||
| |
1.18 | 328 | <p> |
| |
6.11 | 329 | Recovery codes provide a backup access method when a user loses access to the authenticator application |
| 330 | or cannot complete the normal verification flow. | ||
| |
1.18 | 331 | </p> |
| |
6.11 | 332 | |
| 333 | <p> | ||
| 334 | Recovery codes are generated for the user and displayed only once. Each code can be used one time. | ||
| 335 | When new recovery codes are generated, previous recovery codes are invalidated. | ||
| 336 | </p> | ||
| 337 | |||
| 338 | <p> | ||
| 339 | Users should save their recovery codes in a secure location immediately after generation. | ||
| 340 | Administrators can configure how many recovery codes are generated, and setting the number to 0 disables them. | ||
| 341 | </p> | ||
| |
1.18 | 342 | </article> |
| 343 | |||
| |
6.11 | 344 | <aside class="product-info-card" aria-labelledby="trusted-devices-title"> |
| 345 | <h3 id="trusted-devices-title">Trusted devices</h3> | ||
| |
1.18 | 346 | <ul> |
| |
6.11 | 347 | <li>Reduce repeated MFA prompts on known browsers or devices</li> |
| 348 | <li>Remain valid for the configured number of days</li> | ||
| 349 | <li>Can be reviewed and removed from the user profile</li> | ||
| 350 | <li>The current trusted browser is marked in the list</li> | ||
| 351 | <li>Removed when a user’s MFA setup is reset</li> | ||
| |
1.18 | 352 | </ul> |
| 353 | </aside> | ||
| 354 | </div> | ||
| 355 | </div> | ||
| 356 | </section> | ||
| 357 | |||
| |
6.11 | 358 | {{/html}} |
| 359 | |||
| 360 | {{gallery}} | ||
| 361 | [[image:mfa-recovery-codes.png]] | ||
| 362 | [[image:mfa-trusted-devices.png]] | ||
| 363 | {{/gallery}} | ||
| 364 | |||
| 365 | {{html clean="false"}} | ||
| 366 | |||
| 367 | <section class="product-section-muted" aria-labelledby="profile-title"> | ||
| 368 | <div class="container"> | ||
| 369 | <div class="product-layout"> | ||
| 370 | <article class="product-summary-card"> | ||
| 371 | <h2 id="profile-title">User and administrator management</h2> | ||
| 372 | |||
| 373 | <p> | ||
| 374 | The user profile contains a dedicated MFA section. Users can configure MFA, review their status, | ||
| 375 | manage recovery codes and manage trusted devices from this area. | ||
| 376 | </p> | ||
| 377 | |||
| 378 | <p> | ||
| 379 | Administrators can also open a user profile and access the MFA section for that user. | ||
| 380 | This is useful when a user loses access to their authenticator application or needs to restart the setup process. | ||
| 381 | </p> | ||
| 382 | |||
| 383 | <p> | ||
| 384 | Resetting MFA removes the authenticator app setup, invalidates recovery codes and removes trusted devices. | ||
| 385 | If MFA is required globally, the user will be asked to configure MFA again at the next login. | ||
| 386 | </p> | ||
| 387 | </article> | ||
| 388 | |||
| 389 | <aside class="product-info-card" aria-labelledby="profile-actions-title"> | ||
| 390 | <h3 id="profile-actions-title">Profile actions</h3> | ||
| 391 | <ul> | ||
| 392 | #foreach ($item in $profileItems) | ||
| 393 | <li>$item</li> | ||
| 394 | #end | ||
| 395 | </ul> | ||
| 396 | </aside> | ||
| 397 | </div> | ||
| 398 | </div> | ||
| 399 | </section> | ||
| 400 | |||
| 401 | {{/html}} | ||
| 402 | |||
| 403 | {{gallery}} | ||
| 404 | [[image:mfa-user-profile-overview.png]] | ||
| 405 | [[image:mfa-admin-user-management.png]] | ||
| 406 | {{/gallery}} | ||
| 407 | |||
| 408 | {{html clean="false"}} | ||
| 409 | |||
| 410 | <section aria-labelledby="rollout-title"> | ||
| 411 | <div class="container"> | ||
| 412 | <h2 id="rollout-title">Rollout recommendations</h2> | ||
| 413 | |||
| 414 | <p class="section-intro"> | ||
| 415 | For a smooth rollout, start with a small administrator or pilot group before requiring MFA for everyone. | ||
| 416 | A gradual rollout helps validate the configuration, prepare communication and reduce support issues. | ||
| 417 | </p> | ||
| 418 | |||
| 419 | <ol class="process-list"> | ||
| 420 | #foreach ($entry in $rolloutItems) | ||
| 421 | <li> | ||
| 422 | <strong>$entry.title</strong> | ||
| 423 | $entry.content | ||
| 424 | </li> | ||
| 425 | #end | ||
| 426 | </ol> | ||
| 427 | </div> | ||
| 428 | </section> | ||
| 429 | |||
| 430 | <section class="product-section-muted" aria-labelledby="planning-title"> | ||
| 431 | <div class="container"> | ||
| 432 | <div class="product-layout"> | ||
| 433 | <article class="product-summary-card"> | ||
| 434 | <h2 id="planning-title">Planning installation</h2> | ||
| 435 | |||
| 436 | <p> | ||
| 437 | Before installing or rolling out MFA, it is useful to review the current XWiki version, | ||
| 438 | authentication setup, user base and security expectations. | ||
| 439 | </p> | ||
| 440 | |||
| 441 | <p> | ||
| 442 | This helps define whether MFA should be optional, required for selected users, or enforced globally. | ||
| 443 | It also helps decide whether trusted devices and recovery codes should be enabled. | ||
| 444 | </p> | ||
| 445 | </article> | ||
| 446 | |||
| 447 | <aside class="product-info-card" aria-labelledby="planning-info-title"> | ||
| 448 | <h3 id="planning-info-title">Useful information before installation</h3> | ||
| 449 | <ul> | ||
| 450 | <li>XWiki version</li> | ||
| 451 | <li>Single wiki or wiki farm with subwikis</li> | ||
| 452 | <li>Current authentication setup</li> | ||
| 453 | <li>Optional or globally required MFA policy</li> | ||
| 454 | <li>Trusted-device policy</li> | ||
| 455 | <li>Recovery-code policy</li> | ||
| 456 | <li>Rollout communication needs</li> | ||
| 457 | </ul> | ||
| 458 | </aside> | ||
| 459 | </div> | ||
| 460 | </div> | ||
| 461 | </section> | ||
| 462 | |||
| |
1.18 | 463 | <section class="cta-section" aria-labelledby="cta-title"> |
| 464 | <div class="container"> | ||
| 465 | <div class="cta-panel"> | ||
| 466 | <h2 id="cta-title">Interested in using this extension?</h2> | ||
| |
6.11 | 467 | |
| |
1.18 | 468 | <p> |
| |
6.11 | 469 | Send a short message with your XWiki version, authentication setup and whether you need |
| 470 | authenticator app codes, email verification codes, combined verification, recovery codes | ||
| 471 | or trusted-device remembering. | ||
| |
1.18 | 472 | </p> |
| |
6.11 | 473 | |
| |
1.18 | 474 | <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a> |
| 475 | </div> | ||
| 476 | </div> | ||
| 477 | </section> | ||
| 478 | |||
| 479 | {{/html}} | ||
| 480 | {{/velocity}} |