196 lines
6.5 KiB
Nix
196 lines
6.5 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.services.authelia.instances.main;
|
|
dataDir = "/var/lib/authelia-${cfg.name}";
|
|
authelia-snippets = pkgs.callPackage ./lib/autheliaSnippets.nix { inherit pkgs; };
|
|
in
|
|
{
|
|
services.authelia.instances = {
|
|
main = {
|
|
enable = true;
|
|
secrets = {
|
|
jwtSecretFile = config.age.secrets.authelia-jwt.path;
|
|
storageEncryptionKeyFile = config.age.secrets.authelia-encryption.path;
|
|
sessionSecretFile = config.age.secrets.authelia-session.path;
|
|
};
|
|
settings = {
|
|
theme = "light";
|
|
log.level = "debug";
|
|
|
|
authentication_backend = {
|
|
file = {
|
|
path = dataDir + "/users.yml";
|
|
};
|
|
};
|
|
storage = {
|
|
local = {
|
|
path = dataDir + "/db.sqlite3";
|
|
};
|
|
};
|
|
session = {
|
|
cookies = [
|
|
{
|
|
domain = "shobu.fr";
|
|
authelia_url = "https://auth.shobu.fr";
|
|
default_redirection_url = "https://shobu.fr";
|
|
}
|
|
];
|
|
};
|
|
notifier = {
|
|
filesystem = {
|
|
filename = "${dataDir}/notification.txt";
|
|
};
|
|
};
|
|
access_control = {
|
|
default_policy = "deny";
|
|
rules = [
|
|
{
|
|
domain = "auth.shobu.fr";
|
|
policy = "bypass";
|
|
}
|
|
{
|
|
domain = "*.shobu.fr";
|
|
policy = "two_factor";
|
|
}
|
|
];
|
|
};
|
|
server = {
|
|
endpoints = {
|
|
authz = {
|
|
auth-request = {
|
|
implementation = "AuthRequest";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
identity_providers = {
|
|
oidc = {
|
|
hmac_secret = "this_is_a_secret_abc123abc123abc"; # 64+ character secret
|
|
jwks = [
|
|
{
|
|
key = ''
|
|
-----BEGIN PRIVATE KEY-----
|
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBGxQpgV074AB1
|
|
ee+JiDMxuiVooVuD8RzVISTy0tVNBFS5vydB1g5k072shMdCE8S2M4oTaW7ZG1h0
|
|
A+XbgZj+wZFcdHA+lD6QRGSN03FlrRZBMv8BCKzctdgAW1Dtrho31+Nw+3jTrrbO
|
|
DiQaH2kzanET0GZJ+cD3AngWYV0KCkq8yws3T8AiK4oNghyv6Amknmbf7sJ+aZ8C
|
|
f8WCixiErT/TjEGKRxFTKw3LMrdrbljE8JP+f1sTpDZP6uOtH0YS0iJ4nWHvxKYH
|
|
LHLzrx3rO0zBrPiXK3eAtP2baPxS5y26kJcVL5bUSbDdB3NCznZc50OO14huX2s+
|
|
GVct0FsLAgMBAAECggEAAUoZTy91wXa5gn8EzQVWzj9YfJDv2Pn4/hjLmRNHFADQ
|
|
gmtXfhNJiHte7qqdjB1ag8TgOcHd8oyRFmcgCs3BaL68uwEdtq/hT4FXvF37EKW+
|
|
q/PyS38XNMWBIpfD+tmYGJHfzp2HsuPCz5tbSzG5qioZvMNHd4FtRXj6cGntjRAg
|
|
uW1Ns2h//BajftwD8RLHOvq7lWLaPWbdbte396KNBdNpceargISf9VEJik/dPWrT
|
|
jV5bNAm7chvEfjhLqFCJ/p6j7z4DLFGrhYnh50btfe9FnWRtUYAGxhfaobveDPVe
|
|
AI0lFN7IFU6+G6cYHTZAtAviWIutDwK0K9ACYCo1wQKBgQDiWEIdoYvjAh2J9K8f
|
|
8YWa660YuvLSYQmvimr7E9FzoFdiUeFqlVCw/SIz7mRuDDCliDFxheekc8+jJB5U
|
|
kfR2C2o3llRy+wLVap6X5OmqVAjFuHXxntbK/zwyv4K5uecwtEgDyGdXW2eZDog7
|
|
VohuWOD3cTDAkVFu/Mw/02/CqwKBgQDaZ/b1Rfu9QXLvgtf23PpqKb0VG6gOo/Sm
|
|
bpGnEBG9sAnsvDHBs85UTxzzr0qWOSguDh5NMxd0/IxKiLDRPvshhod9rWw0T8Qh
|
|
jBDYsDLBZlBT1AVKvkeELZx9DW1Iomx6bdtYRX3SkgBKVK43q17J3T37U/UJ36PQ
|
|
5e1lBbDJIQKBgQDcEcP222MPTLc7stOy0zl77zlVmi8NrZulOYfapuI28ecEiWgK
|
|
ITNbYkMnCtpKxT9nMowgPHmEw7VWgX+b6m0teNvFQDzLrpKKvieEt+UY3qvI0hia
|
|
3D0rEg6NqPaJbd8C08ZRJ0CTByQrBJ4gU3pDD9drvnoQQTpUFybfx8waEQKBgQDL
|
|
6a1FKuXyuRyaSktgjMiwPe/vuTabFLDigvEyTWqC880QXlUGSN4nEQYy7kJxJ0RA
|
|
W6Ym5cDM1M4W+LA9bNQDZRszV6ti2+Z+e8tuxHNe5iuxWI7oTedvnTYx+0tBOYSW
|
|
eeME8zyaUP48Z/uQtkt1pT6tXKG3ajoEW+fdHgcEgQKBgCCTnBkASe21/n+D3c02
|
|
vGekM3ioWNe9heIWv/7aWmMXb14DBCZMVXNyfOe7gQs2u3OX+IBW8UscGhY2LjVV
|
|
5dKLMIWHw8Afccw4isYhequmJeai2Q3SSenWc7lIqOG4FDpwkcjW0VBBaU/p7ZnA
|
|
h3JJ7q49hdgOKpF/xZNwmmfI
|
|
-----END PRIVATE KEY-----''; # rsa private key
|
|
}
|
|
];
|
|
claims_policies = {
|
|
trilium = {
|
|
id_token = [
|
|
"email"
|
|
"name"
|
|
];
|
|
};
|
|
};
|
|
clients = [
|
|
{
|
|
client_id = "trilium";
|
|
client_name = "Trilium Notes";
|
|
client_secret = "$pbkdf2-sha512$310000$c8p78n7pUMln0jzvd4aK4Q$JNRBzwAo0ek5qKn50cFzzvE9RXV88h1wJn5KGiHrD0YKtZaR/nCb2CJPOsKaPK0hjf.9yHxzQGZziziccp6Yng";
|
|
public = false;
|
|
authorization_policy = "two_factor";
|
|
claims_policy = "trilium";
|
|
require_pkce = false;
|
|
pkce_challenge_method = "";
|
|
redirect_uris = [ "https://trilium.shobu.fr/callback" ];
|
|
scopes = [
|
|
"openid"
|
|
"profile"
|
|
"email"
|
|
];
|
|
response_types = [ "code" ];
|
|
grant_types = [ "authorization_code" ];
|
|
access_token_signed_response_alg = "none";
|
|
userinfo_signed_response_alg = "none";
|
|
token_endpoint_auth_method = "client_secret_basic";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
# systemd.tmpfiles.rules = lib.mkIf cfg.enable [
|
|
# "d '${dataDir}' 0700 ${cfg.user} ${cfg.group} - -"
|
|
# ];
|
|
|
|
age.secrets = {
|
|
authelia-jwt = {
|
|
owner = cfg.user;
|
|
file = ./secrets/authelia-jwt.age;
|
|
mode = "700";
|
|
};
|
|
authelia-encryption = {
|
|
owner = cfg.user;
|
|
file = ./secrets/authelia-encryption.age;
|
|
mode = "700";
|
|
};
|
|
authelia-session = {
|
|
owner = cfg.user;
|
|
file = ./secrets/authelia-session.age;
|
|
mode = "700";
|
|
};
|
|
};
|
|
|
|
services.nginx = {
|
|
enable = true;
|
|
recommendedProxySettings = true;
|
|
recommendedTlsSettings = true;
|
|
|
|
virtualHosts."auth.shobu.fr" =
|
|
let
|
|
upstream = "http://thea:9091";
|
|
in
|
|
{
|
|
enableACME = true;
|
|
forceSSL = true;
|
|
|
|
locations."/" = {
|
|
proxyPass = upstream;
|
|
extraConfig = ''
|
|
error_log /var/log/nginx/debug_authelia.log debug;
|
|
include ${authelia-snippets.proxy};
|
|
set $upstream ${upstream};
|
|
'';
|
|
};
|
|
locations."/api/verify" = {
|
|
proxyPass = upstream;
|
|
};
|
|
locations."/api/authz" = {
|
|
proxyPass = upstream;
|
|
};
|
|
};
|
|
};
|
|
}
|