
Accès aux ressources de sécurité z/OS à l'aide de WZSSAD
L'acronyme WZSSAD (z/OS System Security Access Domain) désigne les permissions octroyées au serveur Liberty. Ces permissions (ou droits) contrôlent quels domaines d'application et profils de ressource SAF le serveur peut interroger lorsqu'il doit authentifier et autoriser des utilisateurs.
Par exemple, si vous voulez configurer deux instances de serveur Liberty, une pour la production et l'autre pour le test, et que vous voulez que votre accès en fonction du rôle diffère pour la production et le test, vous pouvez configurer deux domaines d'accès de sécurité du système différents.
Le serveur Liberty est un programme non autorisé qui peut être configuré et exécuté par des utilisateurs qui ne sont pas des administrateurs ou qui ne sont pas des utilisateurs privilégiés. Par conséquent, il est important pour l'intégrité et la sécurité du système que l'utilisateur ne puisse pas profiter du serveur pour exécuter des opérations pour lesquelles il ne dispose pas explicitement des droits.
- Authentification d'un utilisateur
- Autorisation d'un sujet en tant que rôle Java™ EE
- Autorisation d'un sujet pour d'autres ressources SAF
Authentification d'un utilisateur
Le serveur authentifie des utilisateurs auprès d'un domaine SAF particulier qui est configuré via la définition d'une ressource appelée APPLID dans la classe APPL. Pour qu'un utilisateur soit authentifié auprès du domaine, il doit disposer de l'accès en lecture (READ) à la ressource APPLID de la classe APPL. De plus, à chaque fois que la classe APPL est active, l'ID utilisateur non authentifié (WSGUEST par défaut) requiert également l'accès READ à la ressource APPLID dans la classe APPL.
Le nom de ressource APPLID utilisé par le serveur est spécifié par l'attribut profilePrefix dans l'élément de configuration <safCredentials>. Si vous ne spécifiez pas cet élément, la valeur par défaut de profilePrefix BBGZDFLT est utilisée.
<safCredentials profilePrefix="BBGZDFLT"/>
// Define the BBGZDFLT APPLID to RACF.
RDEFINE APPL BBGZDFLT UACC(NONE)
// Activate the APPL class.
//If not active, the domain is not restricted, which means anyone can authenticate to it.
SETROPTS CLASSACT(APPL)
//All users to be authenticated by the server must have READ access to the APPLID in the APPL class:
PERMIT BBGZDFLT CLASS(APPL) ACCESS(READ) ID(UserID)
//The unauthenticated user ID requires READ access to the APPLID in the APPL class:
PERMIT BBGZDFLT CLASS(APPL) ACCESS(READ) ID(WSGUEST)
RDEFINE SERVER BBG.SECPFX.BBGZDFLT UACC(NONE)
PERMIT BBG.SECPFX.BBGZDFLT CLASS(SERVER) ACCESS(READ) ID(serverUserId)
Autorisation d'un sujet en tant que rôle Java EE
profilePrefix="BBGZDFLT"
Application resource name = "MYAPP"
Application role name = "ADMIN"
Mapped profile name = "BBGZDFLT.MYAPP.ADMIN"
Pour plus d'informations, voir Liberty : Contrôle de la manière dont les rôles sont mappés aux profils SAF
EJBROLE profile name = "BBGZDFLT.ADMIN"
HLQ = "BBGZDFLT"
RDEFINE SERVER BBG.SECPFX.BBGZDFLT UACC(NONE)
PERMIT BBG.SECPFX.BBGZDFLT CLASS(SERVER) ACCESS(READ) ID(serverUserId)
Dans
cet exemple, comme le mappeur de rôles SAF utilise la valeur de l'attribut
profilePrefix comme HLQ dans le nom du profil SAF qu'il génère,
le même profil, nommé BBG.SECPFX.BBGZDFLT, réglemente à la fois le droit
d'exercer des vérifications d'authentification avec APPLID et le droit d'exercer des
vérifications d'autorisation avec le profil EJBROLE.Autorisation d'un sujet pour d'autres ressources SAF
Les applications Java EE peuvent procéder à des vérifications de contrôle d'accès en fonction de classes SAF autres que EJBROLE. Le domaine WZSSAD détermine avec quelles classes SAF autres que EJBROLE le serveur peut exercer la vérification d'autorisation. On évite ainsi que des utilisateurs ou des applications non autorisés profitent du fait que le serveur utilise des services SAF autorisés pour découvrir avec quels profils de ressource, dans les classes SAF autres que EJBROLE, ils peuvent être autorisés.
RDEFINE SERVER BBG.SECCLASS.FACILITY UACC(NONE)
PERMIT BBG.SECCLASS.FACILITY CLASS(SERVER) ACCESS(READ) ID(serverUserId)