Autenticació
Com fer autenticació amb Tomcat
Autenticació
L'autenticació la podem fer "a mà" o basar-nos amb l'ajuda que ens dóna el servidor Tomcat.
Dos punts a tenir en compte:
- mètode d'autenticació: BASIC, FORM
- usuaris + rols (realm): usuaris tomcat (per defecte), usuaris en bdd
Mètodes d'autenticació
Autenticació BASIC
Configuració a web.xml:<security-role>
<role-name>autbasic</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<url-pattern>/autbasic/*</url-pattern> //zona que volem protegir (podem posar més url-pattern)
</web-resource-collection>
<auth-constraint>
<role-name>autbasic</role-name> //tants role-name com necessitem
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee> //si tinguéssim SSL posaríem CONFIDENTIAL
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
Autenticació FORM
Configuració a web.xml:<security-role>
<role-name>autform</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<url-pattern>/autform/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>autform</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/autform/login.jsp</form-login-page> //pàgina amb el formulari
<form-error-page>/autform/error.jsp</form-error-page> //pàgina d'error
</form-login-config>
</login-config>
La pàgina del formulari ha tenir accio i noms dels camps especials:
<form method="post" action="j_security_check">
<div>Usuari: <input type="text" name="j_username" /></div>
<div>Contrasenya: <input type="password" name="j_password" /></div>
<div><input type="submit" value="Login"/></div>
</form>
En els dos casos podem accedir al nom d'usuari fent:
Principal usu = request.getUserPrincipal(); //java.security.Principal
usu.getName() // <- nom
Usuaris i rols
Usuaris i rols en un fitxer:
Per defecte els usuaris estan al fitxer tomcat-users.xml:
<user password="monica" roles="autbasic,autform" username="monica" />
<user password="anna" roles="autbasic,autform" username="anna" />
El Realm ens ve per defecte, però si volem que només estigui el realm per un context el posem en el context adequat. El que configura el realm és:
<Resource auth="Container"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
name="UserDatabase" pathname="conf/tomcat-users.xml"
type="org.apache.catalina.UserDatabase" />
i
<Realm
className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
Usuaris i rols a base de dades:
S'han de crear dues taules:
- taula d'usuaris amb 2 columnes (com a mínim): nom d'usuari i contrasenya
- taula que relacioni rols i usuaris amb 2 columnes (com a mínim): nom d'usuari i nom de rol
create table usuaris
(
nom_usu varchar(15) not null primary key,
pass_usu varchar(15) not null
);
create table rols_usuaris
(
nom_usu varchar(15) not null,
nom_rol varchar(15) not null,
primary key( nom_usu, nom_rol )
);
Insertem dades:
- taula usuaris: nom_usu: monica , pass_usu: monica
- taula rols_usuaris: nom_usu: monica nom_rol: admin
Insertem el realm de bbdd al context:
<Realm
className="org.apache.catalina.realm.JDBCRealm" //nom del realm que usem
driverName="org.postgresql.Driver" //driver bdd
connectionURL="jdbc:postgresql://localhost/bd" //URL conexió bdd
connectionName="usubd" //usuari bdd
connectionPassword="passbd" //pass usuari bdd
userTable="usuaris" //nom taula d'usuaris
userNameCol="nom_usu" //nom columna noms usuaris de taula usuaris
userCredCol="pass_usu" //nom columna passwords usuaris de taula usuaris
userRoleTable="rols_usuaris" //nom taula que relaciona usuaris i rols
roleNameCol="nom_rol" /> //nom columna noms dels rols
Més info:
http://www.javahispano.org/articles.article.action?id=24
http://edocs.bea.com/wls/docs70//webapp/web_xml.html#1044835
Seguretat
- Tomcat amb ssl: http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html
Passwords encriptades:
consola$ dir_tomcat/bin/digest.sh -a MD5 monica
monica:ff0d813dd5d2f64dd372c6c4b6aed086
- Posem aquesta password al lloc que toca: tomcat-users o bdd
- Li diem al realm que les passwords estan encriptades:
<RealmSi volem encriptar la pass on-line:
className="org.apache.catalina.realm.JDBCRealm"
driverName="org.postgresql.Driver"
digest="MD5"
connectionURL="jdbc:postgresql://localhost/bd"
connectionName="usubd" connectionPassword="passbd"
userTable="usuaris" userNameCol="nom_usu" userCredCol="pass_usu"
userRoleTable="rols_usuaris" roleNameCol="nom_rol" />
- Importem llibreria catalina.jar (està a dir_apache/server/lib)
- Usem: RealmBase.Digest("monica","MD5","utf-8") que ens retorna String amb la contrasenya encriptada
