OpenMFA
gitea.milesward.dev/mward4/openmfa:latest
https://gitea.milesward.dev/mward4/-/packages/container/openmfa
bridge
sh
false
https://gitea.milesward.dev/mward4/OpenMFA/issues
https://gitea.milesward.dev/mward4/OpenMFA
Self-hosted TOTP authenticator with live delivery to Discord, Slack or
Telegram.
Add accounts by uploading a QR code, scanning with the camera, pasting an
otpauth:// link, or importing a Google Authenticator export (one export QR
carries many accounts; you get a checklist, and duplicates are detected).
The web UI lists every account behind its service mark, the way Google or
Microsoft Authenticator does. Codes stay covered until you reveal one, and
Settings -> Log records every reveal and sign-in with who and from where.
(In bridge networking the address is Docker's gateway; use a reverse proxy
or host/br0 networking to see real LAN addresses.)
The distinctive part: each account keeps ONE message in your chosen
channel, rewritten in place every time the code rolls. Three accounts means
three live tiles that keep themselves current. Codes are posted as copyable
text; on Discord a rendered WebP tile is attached as well.
Pick the platform during first-run setup or later in Settings. Discord
needs only a webhook URL. Slack needs a bot token (its webhooks can't edit
messages). Telegram needs a bot token, and the app detects your chat ID for
you.
SECURITY NOTE: anyone who can read that channel can read these codes, which
is most of the point of a second factor. Use a private channel only you are
in, and treat the webhook URL or bot token as a secret. TOTP secrets are
encrypted at rest with XChaCha20-Poly1305.
Tools:Utilities Security:
http://[IP]:[PORT:8720]/
https://gitea.milesward.dev/mward4/OpenMFA/raw/branch/main/docs/brand/icon-256.png
One of: a Discord incoming-webhook URL; a Slack app with the chat:write
bot scope plus a channel ID; or a Telegram bot token from @BotFather. All
can be added after install from Settings → Delivery.
8720
/mnt/user/appdata/openmfa
info,openmfa=info