Skip to content
Pavel Šťastný edited this page Aug 4, 2021 · 10 revisions

Úvod

Aplikaci Kramerius je možné integrovat s autentizačním systémem Shibboleth. Integrace je postavena na standardních komponentách dodávaných konzorciem Internet2.

Předpoklady

Článek předpokládá, že čtenář má zkušenosti s konfigurací webového serveru apache, servlet kontejneru tomcat, služby shibboleth service provider . Důležité odkazy:

Nastavení aplikace

Správně nastavený service provider propaguje přihlášeného uživatele (identitu a atributy získáné z IdP) přímo do servlet kontaineru tomcat, aplikace K5 umí tyto atributy svázat (pomocí mapovacího souboru) s rolí resp. rolemi.

Mapující soubor

Mapování je definováno souborem ~/.kramerius4/shibrules.txt. Struktura souboru je následující:


	shibrules = matchrule+

	matchrule = 'match' condition body
	condition =  '(' value ',' value ')'
	body = '{'  (command | matchrule) * '}'
	command= userassoc | roleassoc

	userassoc = 'user' '(' userattr ',' value ')'  // asociuje vlastnost
        userattr =  STRING  // vlastnost asociovana s uzivatelem, standardne jmeno, prijmeni, email, atd..

	roleassoc = 'role' '(' STRING ')' // asociuje roli
	
	value = STRING | REGEXP | funcvalue // reprezentuje hodnotu, buď string, regpex nebo funkci - String je uvozen znaky ", regularni vyraz / 

	funcvalue = 'header' '(' STRING ')' | 'principal' '(' ')'  // buď vrátí přihlášeného uživatele nebo hodnotu z hlavičky.

Příklady


/** aplikuje se pokud je  v hlavičce definován attribut AJP_affiliation a má hodnotu knav */
match(header("AJP_affilation"),"knav") {
       user("firstname",header("AJP_cn"))  // jméno uživatele přiřadí z hodnoty atributu cn
       user("surname", header("AJP_surname"))  // příjmení uživatele přiřadí z hodnoty atributu surname

       role("k4_admins")  // přiřazení rolí
       role("knav_users")
       role("shib_users")
}


/**  Aplikuje se pokud ma v hlavičce definován atribut AJP_affiliation  a vyhovuje regulárnímu výrazu *.staff.* */
match(header("AJP_affiliation "),/.*staff.*/) { 
       user("firstname",header("AJP_cn"))  // jméno uživatele přiřadí z hodnoty atributu cn
       user("surname", header("AJP_surname"))  // příjmení uživatele přiřadí z hodnoty atributu surname
       user("staff", header("AJP_affiliation ")) // vyplni attribut staff hodnotou z atributu AJP_affilation

       user("note_one", "All staff")  // vyplni atribut note_one textovou poznamkou

       role("shib_users")
}


/** aplikuje se, pokud je v přihlášený uživatel (loginname) happy */
match((principal(),"happy") {
       role("k4_admins")
}

Poznámky k sémantice

Pravidlo match

Řídí se podmínkou definovanou v závorkách. Pokud je podmínka splněna, provádí se kód v těle pravidla. Při vykonávání se provedou všechna pravidla mapovacího souboru pro která platí, že podmínka je rovna true

Přiřazení vlastnosti uživateli (příkaz user)

Umožňuje přiřadit vlastnost uživateli.

       user("firstname",...
       user("surname", ....

Uživateli jde přiřadit jakokoukoliv vlastnost ale pouze firstname a surname se propisuje do databáze, ostatní vlastnosti jsou viditelné pouze v rámci dané http session.

Opakované volání funkce přepíše původní hodnotu.

Přiřazení role (příkaz role)

Umožňuje přiřadit roli uživateli. Pokud se přiřazuje role, která není aplikací K5 definována, aplikace vypíše chybovou hláškou ale vykonávání pravidla pokračuje dál.

Funkce principal

Vrací indentifikátor přihlášeného uživatele. Obvykle se jedná o přihlašovací jméno.

Konkrétně se jedná o následující volání:

Ladící výpisy

Při ladění je možno zapnout ladící výpisy v souboru logging.properties.

cz.incad.kramerius.auth.thirdparty.shibb.level=FINE
cz.incad.kramerius.auth.thirdparty.shibb.rules.objects.level=FINE
Clone this wiki locally