Login and access control based on open identities
  • Go 48.1%
  • Python 42.9%
  • HTML 4.8%
  • Nix 1.7%
  • CSS 1.3%
  • Other 1.2%
Find a file
2025-11-22 16:58:15 +00:00
cli Add IndieAuth ID to CLI tool 2025-06-16 10:52:19 +01:00
cookies Move cookie jar into a package 2024-12-07 18:05:00 +00:00
doc Add a bit more to OPEN_WORLD.md 2025-05-26 10:57:35 +01:00
etc Split HTTP components into an external package 2025-02-16 12:19:17 +00:00
examples/docker First public release 2024-08-25 10:50:17 +01:00
fconfig Basic SQLite support 2025-11-17 14:12:25 +00:00
fhttp Switch to koanf for config file processing 2025-08-25 12:51:50 +01:00
fjwks Initial IdP support for ATProto OAuth 2025-04-13 08:46:34 +01:00
frontend Implement single-use invite links 2025-11-22 16:58:15 +00:00
idp Provide a default path to the config file 2025-11-17 09:59:39 +00:00
LICENSES Add licence text 2024-08-25 14:07:34 +01:00
rp Basic SQLite support 2025-11-17 14:12:25 +00:00
sql Add tables for invitation codes 2025-11-22 16:58:15 +00:00
test Implement single-use invite links 2025-11-22 16:58:15 +00:00
tools Split HTTP components into an external package 2025-02-16 12:19:17 +00:00
upstream pytest -> 1.0.0 2025-06-02 17:24:23 +01:00
web Implement single-use invite links 2025-11-22 16:58:15 +00:00
webfinger Remove fhttp.NewRequest 2025-04-14 19:24:11 +01:00
.gitignore Quick and dirty CLI tool for manipulating users and roles 2025-04-20 09:36:23 +01:00
.version Make version numbers useful 2025-05-18 12:08:34 +01:00
CREDITS.md Add image file credits 2025-04-28 12:17:24 +01:00
docker-compose.yml More configurability for Kratos 2025-06-04 08:31:24 +01:00
flake.lock Upgrade nixpkgs, ftpkgs 2025-11-17 15:38:44 +00:00
flake.nix Upgrade nixpkgs, ftpkgs 2025-11-17 15:38:44 +00:00
frontend.nix Basic SQLite support 2025-11-17 14:12:25 +00:00
go.mod Basic SQLite support 2025-11-17 14:12:25 +00:00
go.sum Switch to koanf for config file processing 2025-08-25 12:51:50 +01:00
gomod2nix.toml Basic SQLite support 2025-11-17 14:12:25 +00:00
idp.nix Make version numbers useful 2025-05-18 12:08:34 +01:00
Makefile CGO_ENABLED=1 is required for SQLite 2025-11-17 15:22:32 +00:00
pyproject.toml pytest -> 1.0.0 2025-06-02 17:24:23 +01:00
README.md Documentation update 2025-05-04 09:08:02 +01:00
rp.nix Basic SQLite support 2025-11-17 14:12:25 +00:00

FedIAM

An experiment with some possibilities for federated single sign-on.

Suppose you want to allow people to log in to your web site. How will they identify themselves? With a username and password? We've all got far too many of those already, and they're not even particularly secure. Perhaps with a Google or Facebook account? That's a lot easier, but do we really want to allow these companies even further into our lives?

FedIAM is a research project which aims to offer an alternative: using Fediverse and IndieWeb protocols, visitors can log in using any one of thousands of small, independent networks run by ordinary people - or even using a provider that they host themselves, independently of any outside influence.

I'd like to think that one day it will be suitable for real use. I wouldn't recommend it right now, though.

Headline Features

  • Server (AS, IdP) and client (RP) for open world authentication networks (mostly OAuth based)
  • Supports signing in using an existing Fediverse (or other) account - or one you host yourself
  • "Seamless" single sign-on with no user interaction (supported providers only)
  • Written by a non-expert! Woefully insecure! All manner of attacks, just waiting to be found! Invite your security expert friends to the party, and laugh together at the n00b! Fun for all the family!

Supported identity providers

How do I try it?

There's a basic demo instance running at https://login.mythik.co.uk/ which anyone is welcome to try out. It doesn't do much - just lets you log in and then displays your identity. A more interesting demo at https://discourse.mythik.co.uk/ shows an integration with a real application.

To set up an instance of your own, you can use the Docker Quick Start Guide, or you can build it from source if you set up a local development environment. In both cases you'll need to configure a database.

Documentation

Important Caveat

This is just a toy, for experimental purposes only. It shouldn't be considered secure.