Poskytovatelé přihlašovacích údajů¶
MongoDB¶
- MongoDB je výchozí úložiště pro SeaCat Auth.
- Přihlašovací údaje následují předem definovanou schéma:
credential:
_id: unikátní ID (bson.ObjectId),
_c: čas vytvoření (UTC timestamp),
_m: čas poslední úpravy (UTC timestamp),
_v: verze (int),
username: (str),
email: (str),
phone: (str),
__password: hash hesla (str),
suspended: (bool),
data: další vlastní data (objekt),
- Chcete-li přidat poskytovatele MongoDB, přidejte sekci
[seacatauth:credentials:mongodb:<provider_name>]
do konfigurace.
Příklad konfigurace¶
[seacatauth:credentials:mongodb:default]
mongodb_uri=mongodb://mongo:27017
mongodb_database=auth
tenants=yes
register=no
Externí MongoDB (xmongodb
)¶
- Vhodné pro externí Mongo databáze s přihlašovacími údaji, které neodpovídají schématu očekávanému výchozím poskytovatelem MongoDB.
- Pouze pro čtení.
- Chcete-li přidat poskytovatele XMongoDB, přidejte sekci
[seacatauth:credentials:xmongodb:<provider_name>]
do konfigurace. - Musíte specifikovat agregační pipeline dotazy
list
,get
alocate
. - Výstup agregačního dotazu by měl odpovídat schématu přihlašovacích údajů výchozího poskytovatele MongoDB, tj. objekt přihlašovacích údajů by měl obsahovat unikátní
_id
,email
,__password
a volitelněusername
a další pole. Použijte operaci$project
k mapování vašich databázových polí na tyto aliasy. Další pole ve výstupu jsou považována za součástcustom_data
.
POZNÁMKA:
Znak $
v dotazech musí být zdvojen jako $$
(únik je nutný ve formátu configparser).
Dotaz pro seznam
- Používá se pro iteraci přes přihlašovací údaje, například v API pro seznam přihlašovacích údajů (
GET /credentials
). - Očekává se, že výsledek dotazu bude obsahovat
_id
,username
,email
, volitelněphone
asuspended
.
Dotaz pro získání
- Používá se pro přístup k konkrétním přihlašovacím údajům, například v API pro detail přihlašovacích údajů (
GET /credentials/<credentials_id>
). - Očekává se, že výsledek dotazu bude obsahovat
_id
,username
,email
,__password
, volitelněphone
asuspended
. - Použijte operaci
$match
s parametrem%(_id)s
na místo ID přihlašovacích údajů.
POZNÁMKA:
Použijte {"$$oid": %(_id)s}
místo ObjectId(%(_id)s)
.
Dotaz pro lokalizaci
- Používá se pro lokalizaci přihlašovacích kandidátů podle
username
,email
,phone
nebo jiných polí. - Očekává se, že výsledek dotazu bude obsahovat
_id
, volitelněusername
aemail
. - Použijte operaci
$match
s parametrem%(ident)s
pro shodu přihlašovacích údajů podle identifikátoru (řetězec, který uživatel zadal do přihlašovacího formuláře).
Příklad konfigurace¶
[seacatauth:credentials:xmongodb:users]
mongodb_uri=mongodb://localhost:27017
database=test
collection=users
list=
[
{"$$project": {
"_id": true,
"username": true,
"email": true,
"phone": true,
"suspended": true
}}
]
get=
[
{"$$match": {
"_id": {"$$oid": %(_id)s}
}},
{"$$project": {
"_id": true,
"username": true,
"email": true,
"phone": true,
"suspended": true,
"likes": true,
"__password": true
}}
]
locate=
[
{"$$match": {
"$$or": [
{
"username": %(ident)s
},
{
"email": %(ident)s
}
]
}},
{"$$project": {
"_id": true,
"username": true,
"email": true,
"phone": true,
"suspended": true
}}
]
LDAP / ActiveDirectory¶
- Pouze pro čtení
- Deklarováno sekcí
[seacatauth:credentials:ldap:<provider_name>]
v konfiguraci
Příklad konfigurace¶
[seacatauth:credentials:ldap:external]
uri=ldaps://localhost:636
base=OU=Users,OU=Employees,DC=ThisCompany,DC=local
filter=(cn=*)
attrusername=sAMAccountName
tls_cafile=/conf/secret/local-ldap-cert.pem
tls_require_cert=allow
MySQL¶
- Chcete-li přidat poskytovatele MySQL, přidejte sekci
[seacatauth:credentials:mysql:<provider_id>]
do konfigurace. - Může být nakonfigurován jako editovatelný nebo pouze pro čtení.
Poskytovatel pouze pro čtení¶
- Poskytovatel MySQL je ve výchozím nastavení pouze pro čtení.
- Dotazy
list
,get
alocate
musí být specifikovány. - Použijte klauzule
AS
k mapování výsledkových polí na očekávaná pole SeaCat Auth_id
,username
,email
,phone
,suspended
a__password
. - Kde je to nutné, použijte pojmenované bind proměnné ve stylu
pyformat
.
Dotaz pro seznam
- Používá se pro iteraci přes přihlašovací údaje, například v API pro seznam přihlašovacích údajů (
GET /credentials
). - Očekává se, že výsledek dotazu bude obsahovat
_id
,username
,email
, volitelněphone
asuspended
. Použijte klauzuleAS
k přidání těchto aliasů k databázovým polím. - Použijte klauzuli
ORDER BY
pro zajištění konstantního pořadí.
Dotaz pro získání
- Používá se pro přístup k konkrétním přihlašovacím údajům, například v API pro detail přihlašovacích údajů (
GET /credentials/<credentials_id>
). - Očekává se, že výsledek dotazu bude obsahovat
_id
,username
,email
,__password
, volitelněphone
asuspended
. Použijte klauzuleAS
k přidání těchto aliasů k databázovým polím. - Použijte klauzuli
WHERE
s bind parametrem%(_id)s
pro shodu databázového objektu podle jeho ID. - Další datová pole, která by měla být zahrnuta v objektu přihlašovacích údajů, musí být také uvedena v konfiguraci jako
data_fields
.
Dotaz pro lokalizaci
- Používá se pro lokalizaci přihlašovacích kandidátů podle
username
,email
,phone
nebo jiných polí. - Očekává se, že výsledek dotazu bude obsahovat
_id
, volitelněusername
aemail
. - Použijte klauzuli
WHERE
s bind parametrem%(ident)s
pro shodu přihlašovacích údajů podle identifikátoru (řetězec, který uživatel zadal do přihlašovacího formuláře).
Příklad konfigurace¶
[seacatauth:credentials:mysql:external]
host=localhost
port=3306
user=root
password=rootpassword
database=auth
data_fields=firstName lastName
list=
SELECT `id` AS '_id', `userName` AS 'username', `userEmail` AS 'email', `userPhone` AS 'phone'
FROM `users`
ORDER BY `id` ASC;
get=
SELECT `id` AS '_id', `userName` AS 'username', `userEmail` AS 'email', `userPhone` AS 'phone', `userPwd` AS '__password', `userSuspened` AS 'suspended', firstName, lastName
FROM `users`
WHERE `id` = %(_id)s;
locate=
SELECT `id` AS '_id', `userName`, `userEmail`
FROM `users`
WHERE (LOWER(`userName`) = %(ident)s) OR (LOWER(`userEmail`) = %(ident)s);
Editovatelný poskytovatel¶
- Chcete-li povolit vytváření, aktualizaci a mazání uživatelů, specifikujte
editable=yes
v konfiguraci. - To vyžaduje specifikaci dotazů
create
,update
adelete
.
Příklad konfigurace¶
[seacatauth:credentials:mysql:external]
editable=yes
user=root
password=rootpassword
database=auth
data_fields=firstName lastName
list=
SELECT `id` AS '_id', `userName` AS 'username', `userEmail` AS 'email', `userPhone` AS 'phone'
FROM `users`
ORDER BY `id` ASC;
get=
SELECT `id` AS '_id', `userName` AS 'username', `userEmail` AS 'email', `userPhone` AS 'phone', `userPwd` AS '__password', `userSuspened` AS 'suspended', firstName, lastName
FROM `users`
WHERE `id` = %(_id)s;
locate=
SELECT `id` AS '_id', `userName`, `userEmail`
FROM `users`
WHERE (LOWER(`userName`) = %(ident)s) OR (LOWER(`userEmail`) = %(ident)s);
create=
INSERT INTO `users`
(`userName`, `userEmail`, `userPhone`)
VALUES (%(username)s, %(email)s, %(phone)s);
update=
UPDATE `users`
SET `userEmail` = %(email)s, `userPhone` = %(phone)s, `userSuspened` = %(suspended)s, `userPwd` = %(__password)s
WHERE `id` = %(_id)s;
delete=
DELETE FROM `users`
WHERE `id` = %(_id)s;
Htpasswd¶
- Pouze pro čtení
- Chcete-li vytvořit poskytovatele htpasswd, přidejte sekci
[seacatauth:credentials:htpasswd:<provider_name>]
do konfigurace a specifikujte cestu k vašemu htpasswd souboru. - Nový htpasswd soubor můžete vytvořit pomocí příkazu
htpasswd
, napříkladhtpasswd /opt/site/seacatauth-conf/htpasswd john-smith
Příklad konfigurace¶
[seacatauth:credentials:htpasswd:local]
path=/conf/htpasswd
V paměti (Slovník)¶
- Neperzistentní editovatelný poskytovatel
- Deklarováno sekcí
[seacatauth:credentials:dict:<provider_name>]
v konfiguraci
Příklad konfigurace¶
[seacatauth:credentials:dict:inmemory]