Basic http autorizace jménem a heslem
Nahrávání a obnovování seznamu uživatelů a jejich hesel
Účelem této funkce je autorizovat uživatele webové služby, který se přihlašuje možností typu "Basic", tedy jménem a heslem. Tzn., že v http hlavičce je pole "Authorization" s hodnotou "Basic dHp6emVzdDM6dGVzdDM=", kde 'dHp6emVzdDM6dGVzdDM=' je zakódované jméno a heslo jako pole bytů Base64 řetězce.
Komponenta si uchovává seznam všech uživatelů UMS a jejich hesla a pravidelně tento seznam obnovuje. Jako přihlašovací jméno se používá sloupec EMAIL, jako heslo sloupec PASSWORD z tabulky UMS_USER.
Pro autorizaci platí tato pravidla:
•Přihlašovací jméno se porovnává case insensitive, heslo case sensitive.
•Pokud je přihlašovací jméno a/nebo heslo prázdný řetězec, je autorizace odmítnuta.
•Pokud je přihlašovací jméno nalezeno v seznamu uživatelů UMS a zároveň se hesla shodují, pak je autorizace přijata. Pokud uživatel není autorizován je mu poslána odpověd se kódem 401 - Access Denied.
•Všechny žádosti o autorizaci a jejich výsledky (úspěch/neúspěch) jsou logovány.
Pomocí tokenu lze autorizovat uživatele tak že posílá vygenerovaný token v rámci příkazu pro každou komunikaci ze serverm.
Každému uživateli musí bý generován samostatný tóken.
Tóken je uložen v tabulce UMS_WEBSERVICE_TOKEN
Název sloupce Datový typ Délka Null Popis
ID int Ne identity sloupec (autoincrement)
UMS_USER_ID int Ano vazba na UMS_USER.ID (uživatel UMS)
TOKEN char 32 Ano token (jednoznačný identifikátor, GUID)
Přepište e-mail na druhém řádku a spusťte skript proti databázi UMS. Pokud skript vrátí NULL, uživatel nebyl podle e-mailu nalezen v UMS_USER. Jinak vrátí Token, tzn. 32 znaků dlouhý řetězec. Opakované spuštění nepůsobí škodu, vrací stále ten samý Token.
declare @email varchar(255)
set @email = '$Auzivatel@email.cz'
declare @token char(32)
declare @newtoken char(32)
SELECT @token = UMS_WEBSERVICE_TOKEN.TOKEN
FROM UMS_USER
LEFT OUTER JOIN UMS_WEBSERVICE_TOKEN ON UMS_WEBSERVICE_TOKEN.UMS_USER_ID = UMS_USER.ID
WHERE UPPER(UMS_USER.EMAIL) = UPPER(@email)
if @token IS NULL
begin
SELECT @newtoken = UPPER(REPLACE(CAST(NEWID() AS VARCHAR(36)), '-', ''))
INSERT INTO UMS_WEBSERVICE_TOKEN(UMS_USER_ID, TOKEN)
SELECT ID, @newtoken
FROM UMS_USER
WHERE UPPER(UMS_USER.EMAIL) = UPPER(@email)
SELECT @token = UMS_WEBSERVICE_TOKEN.TOKEN
FROM UMS_USER
LEFT OUTER JOIN UMS_WEBSERVICE_TOKEN ON UMS_WEBSERVICE_TOKEN.UMS_USER_ID = UMS_USER.ID
WHERE UPPER(UMS_USER.EMAIL) = UPPER(@email)
end
SELECT @token
Seznam jmen uživatelů a hesla se načítají z databáze UMS. Tabulka UMS_USER, sloupce EMAIL a PASSWORD.
Obnovování tohoto seznamu probíhá pravidelně v časovém intervalu, který je daný konfigurační hodnotou RefreshPeriod.