-
Notifications
You must be signed in to change notification settings - Fork 27
Shibboleth
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.
Č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:
- http://shibboleth.net/downloads/service-provider/
- https://wiki.shibboleth.net/confluence/display/SHIB2/Installation+and+Configuration
- http://httpd.apache.org/docs/trunk/
- http://tomcat.apache.org/tomcat-7.0-doc/index.html
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.
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.
/** 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")
}
Ří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
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.
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.
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í:
- http://download.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServletRequest.html#getUserPrincipal()
- http://download.oracle.com/javase/1.4.2/docs/api/java/security/Principal.html#getName()
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