Has anyone considered adding passkey to Plone

I'm working with Claude to improve my Plone site. this has some great advantages but has one drawback: I quickly get into areas for which I have no experience and don't know if the path I am considering is one I should consider.

I want to simplify logging in. I have two options I've considered , one of which I've implemented.

  1. setting cookes to 30 day. this keeps the username/pwd in the login box so users press ok/enter and their in. simple.

  2. the other option is the Windows PassKey (correct name?). I've seen most high security applications (GitHub) are moving to passkeys, so i investigated with claude. I'll post my question first, then list what Claude provided as an implementation outline.

My Question: has anyone implemented a PassKey? Any suggestions on if I should pursue this, even as a test case? thoughts and suggestions appreciated.

Here is what Claude replied

Add the library โ€” webauthn to setup.py; it does the crypto and verification.

Store credentials per user โ€” credential ID, public key, signature counter, device label, date added. A member property fits the pattern you already use for user_icon / your_team_role. One user can have several (laptop + desktop).

A PAS plugin โ€” registered in acl_users, validates a signed challenge and returns the user, then issues the same session ticket you already use. This is what makes the 30-day cookie keep working unchanged.

Two endpoints
Enrol โ€” issues a challenge, verifies what Windows sends back, saves the credential
Sign in โ€” issues a challenge, verifies the signature, logs the user in
Challenge handling โ€” short-lived, single-use, server-side. Getting this wrong is the classic security hole.

UI โ€” a "Sign in with Windows Hello" button on the login page, and "Set up passkey" in the account menu you already have.

Per-tenant config โ€” the passkey is bound to the exact domain. Must come from config, never hardcoded, since every tenant has its own.

Recovery โ€” keep password login, and give admins a way to remove a lost device's passkey.
---------------------------------------------------------------------**
Windows side (mostly configuration)**
Nothing to install. It's built into Windows and the browser โ€” no MSI, no agent.

Requirements โ€” Windows 11 (or 10 22H2), TPM, Windows Hello set up with at least a PIN.
Browsers โ€” current Edge or Firefox. The Edge app inherits it automatically.

Enrolment โ€” user clicks "Set up passkey", Windows prompts for PIN or fingerprint, done. Once per person per machine per site.

One policy decision โ€” let passkeys sync to the user's Microsoft account (follows them to a new PC) or stay locked to the device (more secure, but a dead laptop means re-enrolment). Controllable by group policy.

IMHO, it does not make sense to build this in Plone, but rather to use an external specialist service like Keycloak.

I'm using it with passkeys and other auth options for years. Works great!

You can hook up Plone via pas.plugins.oidc ยท PyPI seamlessly.
I also implemented/use a "full" Plone integration of Keycloak. No Plone users anymore. See wcs.keycloak ยท PyPI

1 Like