1 Sécurité dans Java EE Présentation du cours Plan (1/2) Plan (2/2

1
Sécurité dans Java EE
Université de Nice - Sophia Antipolis
Richard Grin
Version 0.12 – 12/4/13
Présentation du cours
Ce cours montre comment sécuriser une
application Java EE : réserver l’accès de pages
Web (ou de méthodes d’EJB) à certains
utilisateurs
Toute la sécurité n’est pas standardisée dans
Java EE ; pour les parties non standardisées, des
exemples de configuration sont donnés pour le
serveur d’application GlassFish
R. Grin Sécurité Java EE page 2
R. Grin Sécurité Java EE page 3
Plan (1/2)
Généralités sur la sécurité
Présentation de la sécurité dans Java EE et fichiers
de configuration
Rôles et identité des utilisateurs – Authentification
Protection des pages Web
Protéger les méthodes des EJB
Code Java pour la sécurité
Configuration de GlassFish
R. Grin Sécurité Java EE page 4
Plan (2/2)
Un exemple
Logs dans GlassFish
Gérer les mots de passe
R. Grin Sécurité Java EE page 5
Généralités sur la sécurité
Réserver des parties d’une application à certains
utilisateurs implique de gérer
nl’authentification des utilisateurs
nla vérification des autorisations
R. Grin Sécurité Java EE page 6
2
Authentification
Obtenir l’identité des utilisateurs et vérifier qu’un
utilisateur est bien celui qu’il prétend être
Le plus souvent, il s’agit de demander le nom et
le mot de passe de l’utilisateur
R. Grin Sécurité Java EE page 7
Autorisation
Lorsqu’un utilisateur est entré dans l’application,
vérifier qu’il a bien le droit
nd’accéder aux ressources (pages Web, base
de données,…)
nd’accomplir des actions sur ces ressources
(par exemple les consulter, les modifier, les
supprimer)
nde lancer des opérations
R. Grin Sécurité Java EE page 8
Transport des informations
Protéger les informations qui transitent sur le
réseau contre des personnes non autorisés :
nempêcher la lecture des données
confidentielles
nrepérer qu’une information transmise a été
modifiée par une tierce personne avant
d’arriver à destination
R. Grin Sécurité Java EE page 9
Ce support n’abordera que l’authentification par
mot de passe et les autorisations
Il n’abordera pas, par exemple, l’étude des
certificats et de la signature des documents
Les transparents suivants donnent la terminologie
habituelle liée à la sécurité
R. Grin Sécurité Java EE page 10
Utilisateur
L’utilisateur d’une application est identifié par des
« pièces d’identité », credentials en anglais, qui
prouvent son identité
Le plus souvent la saisie d’un nom de login et d’un
mot de passe prouve l’identité d’un utilisateur
L’utilisateur peut correspondre à une personne ou
à une (partie d’une) application informatique
R. Grin Sécurité Java EE page 11 Richard Grin EJB page 12
Principal
Une fois qu’il est authentifié, l’utilisateur devient
un principal (terme anglais qui signifie mandant,
commettant) au nom duquel il effectuera des
opérations dans l’application
Un Principal peut être un utilisateur, un groupe
d’utilisateurs, ou autre, qui a été défini dans
l’environnement opérationnel d’exécution
3
R. Grin Sécurité Java EE page 13
Rôle
La politique de sécurité des serveurs d’application
repose sur la notion de rôle
Exemples de rôle : administrateur, organisateur,
participant, chef de service
Un principal / utilisateur peut avoir un ou plusieurs
rôles dans une application
Un rôle donne des droits aux utilisateurs qui ont
ce rôle
La notion de rôle augmente la portabilité de
l’application puisqu’on ne fait aucune prévision
sur l’existence d’utilisateurs particuliers
Rôles d’un utilisateur
C’est celui qui déploie l’application qui associe
ces rôles
La manière dont un rôle est associé à un
utilisateur n’est pas standard et dépend du
serveur d’applications
Tomcat et GlassFish définissent des groupes
d’utilisateurs et il est possible de les configurer
pour qu’un groupe corresponde à un rôle (voir
section « Configuration GlassFish » plus loin
dans ce support)
R. Grin Sécurité Java EE page 14
Groupes d’utilisateurs
Les utilisateurs sont souvent regroupés en
groupes qui ont les mêmes types d’autorisation,
ce qui facilite l’attribution de rôles aux utilisateurs
(on peut donner en bloc un rôle à tous les
membres d’un groupe)
Par exemple, le groupe des utilisateurs
enregistrés, le groupe des visiteurs non
enregistrés, le groupe des administrateurs
R. Grin Sécurité Java EE page 15
Realm
– domaine de sécurité
Pour authentifier les utilisateurs, les serveurs
d’application doivent conserver des informations
sur ces utilisateurs
Un domaine de sécurité (realm), identifié par son
nom, définit comment ces informations sont
conservées, et comment on les utilise pour
l’authentification (voir balise <login-config> de
web.xml) ; la définition d’un realm n’est pas
standardisée
Exemples : domaine défini par un fichier des mots
de passe, par des tables relationnelles, par un
registre LDAP, par des certificats informatiques
R. Grin Sécurité Java EE page 16
Intervenants dans le
processus de développement
Le développeur écrit l’application et indique les
rôles nécessaires pour les ressources protégées
L’administrateur du serveur d’application gère les
utilisateurs et les groupes d’utilisateurs
Celui qui déploie l’application dans le serveur
d’application indique la correspondance entre les
utilisateurs et groupe d’utilisateurs et les rôles
définis par l’application (le plus souvent en
utilisant les fichiers de déploiement)
R. Grin Sécurité Java EE page 17 R. Grin Sécurité Java EE page 18
Présentation de la sécurité
dans Java EE
4
Richard Grin EJB page 19
Principe général
Écrire du code pour la sécurité est très complexe
et il est préférable de s’appuyer le plus possible
sur les facilités offertes par les serveurs
d’application
Déclaration ou programmation
Java EE permet d’implémenter une politique de
sécurité de façon déclarative ou par
programmation Java
Le plus simple est d’utiliser les déclarations
(annotations Java ou fichiers de déploiement
XML) pour indiquer comment les ressources
sont protégées
Si la façon déclarative ne suffit pas, il est
possible de programmer les cas les plus
complexes en Java
R. Grin Sécurité Java EE page 20
Déclaration
Les annotations permettent d’écrire les
informations sur la politique de sécurité directement
dans le code Java des EJB ou des servlets
Il n’est pas toujours possible d’utiliser une
annotation ; en ce cas les informations de sécurité
sont décrites dans des balises des fichiers de
déploiement
Toutes les annotations ont leur pendant sous forme
de balise XML ; en cas de contradiction, une
information dans un fichier de déploiement
l’emporte sur une annotation
R. Grin Sécurité Java EE page 21
Fichiers de déploiement
Fichiers standards qui ne dépendent pas du serveur
d’application : web.xml (module Web),
ejb-jar.xml (module EJB), application.xml
(module application qui peut regrouper plusieurs
modules dans un fichier EAR)
Chaque serveur d’application peut aussi avoir ses
propres fichiers de déploiement pour les informations
non standardisées ; pour GlassFish,
glassfish-web.xml, glassfish-ejb-jar.xml,
glassfish-application-web.xml
R. Grin Sécurité Java EE page 22
Types de déclarations
Java EE permet de déclarer
nles rôles utilisés par l’application
nla façon d’authentifier les utilisateurs
nles pages Web protégées et les rôles qui y ont
accès
nles classes ou méthodes Java protégées et les
rôles qui y ont accès
R. Grin Sécurité Java EE page 23
Nous allons tout d’abord étudier comment définir
les rôles puis comment authentifier un utilisateur
Nous verrons enfin comment protéger des pages
Web, puis comment restreindre l’accès à des
méthodes Java
L’attribution de rôles à un utilisateur n’est pas
standardisée ; elle sera étudiée pour le cas de
GlassFish
R. Grin Sécurité Java EE page 24
5
R. Grin Sécurité Java EE page 25
Définition des rôles
Déclaration des rôles
Un rôle doit être déclaré avant d’être utilisé
On peut le faire avec une annotation ou dans un
fichier de déploiement XML
R. Grin Sécurité Java EE page 26
Annotation pour déclarer des rôles
L’annotation @DeclareRoles peut être mise sur
les EJB ou les servlets
La casse (majuscules – minuscules) est
significative dans les noms de rôle
Exemple :
@Stateless
@DeclareRoles("admin", "membre", "visiteur")
public class MonBean { ... }
R. Grin Sécurité Java EE page 27
Balise pour déclarer des rôles
Plusieurs balises <security-role> peuvent
être mises directement sous la balise racine
(web-app, ejb-jar ou application)
Exemple :
<security-role>
<description>Administrateur</description>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>membre</role-name>
</security-role>
R. Grin Sécurité Java EE page 28
Référence d’un rôle
Le développeur utilise des noms de rôle dans son
code lorsqu’il écrit un module Java EE
S’il réutilise son module dans plusieurs
applications, un nom de rôle peut avoir un autre
nom dans les autres modules
Avec la balise <security-role-ref> il est
possible de définir un alias pour un nom de rôle,
pour faire correspondre le rôle du module avec un
rôle de l’environnement d’exécution
R. Grin Sécurité Java EE page 29 Richard Grin Sécurité Java EE page 30
Exemple d’alias pour un rôle
Le responsable du déploiement indiquera le rôle
de l’environnement de déploiement
(Controleur) associé au rôle indiqué par le
développeur d’EJB (Admin) :
<security-role-ref>
<description> . . . </description>
<role-name>Admin</role-name>
<role-link>Controleur</role-link>
</security-role-ref>
Si l’utilisateur a le rôle Controleur,
isUserInRole("Admin") retourne true
1 / 28 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !