Authentication server providing tokens for users. Usable by all libIPC services.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Philippe Pittoli a2f5442565
Print which file descriptor we are talking to (or are receiving from).
5 months ago
bin make print-messages 6 months ago
spec Very basic initial spec. 5 years ago
src Print which file descriptor we are talking to (or are receiving from). 5 months ago
.gitignore git ignore 4 years ago README: talk about permissions. 6 months ago README: add + update + fix most explanations. Sill very much WIP. 6 months ago
db-password-file initial commit 5 years ago
makefile Small contribution. 6 months ago
project.zsh Removed unused build targets. 4 years ago
shard.yml New file structure: authd can now be used as a simple library. 10 months ago


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.