Authentication server providing tokens for users. Usable by all libIPC services.
Go to file
Philippe PITTOLI d790caa4e1 Client: do not raise exceptions on expected possible errors. 2024-05-07 10:54:25 +02:00
bin Makefile: compile the applications only when a file changed. 2024-03-13 14:40:10 +01:00
spec Very basic initial spec. 2019-06-29 03:56:06 +02:00
src Client: do not raise exceptions on expected possible errors. 2024-05-07 10:54:25 +02:00
.gitignore git ignore 2020-01-23 21:04:11 +01:00 README: talk about permissions. 2023-06-13 18:34:51 +02:00 README: add + update + fix most explanations. Sill very much WIP. 2023-06-13 18:15:47 +02:00
db-password-file initial commit 2018-09-22 17:08:28 +00:00
makefile Only compile the server by default. 2024-03-23 11:47:30 +01:00
project.zsh Removed unused build targets. 2020-01-04 08:39:37 +01:00
shard.yml Use libsodium. Cryptographic configuration is WIP. 2024-05-02 01:16:01 +02:00


authd is a token-based authentication micro-service.

TODO: explain basic concepts behind authd.


authd is written in Crystal. Youll need the following tools:

  • crystal
  • shards
  • make

To build authd, run the following commands:



$ authd --help

TODO: documentation on how to deploy, including with the mail server and tools.

Users storage

The storage directory will default to ./storage.

No SQL database, database management system or other kind of setup is required to run authd and store users.

To migrate an instance of authd, a simple copy of the storage directory will be enough.

Administrating users

TODO: document how to manage users through authc.



authds protocol is still subject to change.

TODO: document messages.


TODO: document basic functions in the AuthD::Client class to exchange messages with authd.

A AuthD::Client Crystal class is available to build synchronous clients in Crystal.

Authorization rules

Logged users can:

  • retrieve public data of any user individually
  • change their own data: password, email address, profile entries (except the read-only ones)
  • delete their account
  • check their own permissions

Admins with 'Read' permission on the '*' resource can:

  • list users
  • check permissions of other users

Admins with 'Edit' permission on the '*' resource can:

  • change data of another user

Admins with 'Admin' permission on the '*' resource (or the 'admin' boolean) can:

  • change read-only profile entries
  • change permissions
  • delete a user
  • uprank and downrank admins


Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

WIP: design choices

An user has a number, a login, an email address, a profile (Hash(String, JSON::Any)) and permissions. An admin boolean also tells weither or not the user is an administrator.

Requests work mostly on current user. Some take a UserID to identify another user (its number or its login, both are valid), which often implies admin permissions.

Permissions are: None, Read, Edit, Admin. Plus, the admin boolean value in the AuthD::User class.

TODO: continue explaining design choices.