java java-ee glassfish jaas

java - Glassfish 3.1 predeterminado principal a la asignación de roles



java-ee jaas (1)

Cuando especifica los roles y roles en web.xml , está utilizando seguridad declarativa, que esencialmente se basa en el uso de JAAS para hacer cumplir los requisitos de autenticación y autorización especificados de forma declarativa.

Las funciones especificadas en los descriptores de implementación son simplemente representaciones de las funciones que se utilizan en la aplicación. Estos roles no tienen que ser los mismos que los presentes en la base de datos de identidad del usuario (o el dominio de autenticación) utilizados en el tiempo de ejecución, y generalmente estos pueden ser diferentes, ya que el desarrollo de la aplicación puede haberse realizado sin tener en cuenta los usuarios reales y Grupos presentes en la base de datos de identidad de usuario.

Normalmente, se realiza una asignación entre los roles declarativos especificados en web.xml y los principales o grupos presentes en la base de datos de identidad del usuario utilizando los descriptores de implementación específicos del contenedor. En Glassfish 3,1, este es el archivo glassfish-web.xml . Cada una de estas asignaciones asignaría un papel declarativo en la aplicación, ya sea a un principal o un grupo en un reino JAAS, de la siguiente manera en glassfish-web.xml (para implementaciones de archivos WAR) o glassfish-application.xml (para EAR implementaciones de archivos), o glassfish-ejb-jar.xml (para implementaciones de archivos EJB JAR):

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app error-url=""> ... <security-role-mapping> <role-name>user</role-name> <principal-name>Root</principal-name> <!-- Map a principal to the role ''user'' --> <group-name>Administrators</group-name> <!-- Map a group to the role ''user'' --> </security-role-mapping> ... </glassfish-web-app>

glassfish-application.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd"> <glassfish-application> ... <security-role-mapping> <role-name>user</role-name> <principal-name>Root</principal-name> <!-- Map a principal to the role ''user'' --> <group-name>Administrators</group-name> <!-- Map a group to the role ''user'' --> </security-role-mapping> ... </glassfish-application>

glassfish-ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> <glassfish-ejb-jar> ... <security-role-mapping> <role-name>user</role-name> <principal-name>Root</principal-name> <!-- Map a principal to the role ''user'' --> <group-name>Administrators</group-name> <!-- Map a group to the role ''user'' --> </security-role-mapping> ... </glassfish-ejb-jar>

Los descriptores anteriores asignan un user rol a un Principal con una identidad individual de nombre Root y a un grupo de usuarios con Administrators nombre en el reino. Puede omitir cualquiera de estas asignaciones y conservar solo una función a la asignación principal, o una función a la asignación de grupos. También puede tener múltiples directores asignados a la misma función, o múltiples grupos asignados a la misma función, o incluso múltiples directores y grupos asignados a la misma función.

Es importante comprender el concepto de principales y grupos en los reinos de JAAS: un principal representa la identidad de un Sujeto (el usuario que inicia sesión en la aplicación) en el sistema, y ​​podría ser una identidad individual (un solo usuario) o un grupo Identidad (un grupo de usuarios). Al asignar los roles declarativos a los principales o grupos reales, uno podría aplicar las reglas especificadas en web.xml contra cualquier base de datos de identidad de usuario (es decir, cualquier dominio), y podría hacerlo de forma dinámica sin ningún cambio en el código base. ; después de todo, tal cambio requeriría volver a asignar los roles declarativos al nuevo conjunto de principales y grupos, en un ámbito posiblemente diferente. Puede encontrar un tutorial básico sobre cómo la seguridad de Java EE y JAAS trabajan juntas en el capítulo sobre seguridad en el tutorial de Java EE 6 .

Glassfish permite un esquema de mapeo simplificado, donde no es necesario realizar el mapeo de todos los roles declarativos en el descriptor de implementación específico del contenedor (en este caso glassfish-web.xml), siempre y cuando los nombres de los roles declarativos ocurran. Ser similar a los nombres de los principales o grupos. Este es el principal predeterminado para el esquema de mapeo de roles. Parece que en su caso, los principales / grupos en su reino son los mismos que los roles declarativos especificados en web.xml , y por lo tanto, evitaría asignar los roles a principales y grupos explícitamente. En palabras más simples, si el user rol es el mismo que el de un user principal o de un user grupo de user en su reino JAAS (y de manera similar para otras identidades), puede usar el rol predeterminado para el esquema de mapeo principal de Glassfish, sin mapear esto para cada Rol en su archivo web.xml .

Si desea evitar marcar la opción de implementación del principal predeterminado a la asignación de roles, debe proporcionar la asignación de principal / grupo en los descriptores de implementación específicos del contenedor, como lo haría normalmente con otros servidores de aplicaciones.

Puede leer más sobre este tema en una de las publicaciones en blogs.oracle.com que describe esta característica de Glassfish .

Estoy trabajando con glassfish y el módulo jaas.

Configuré mi web.xml de esta manera.

<security-constraint> <web-resource-collection> <web-resource-name>ALL Page for admin</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>user</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>file</realm-name> </login-config> <security-role> <description>Administrator</description> <role-name>user</role-name> </security-role>

Significa que todos los usuarios que quieran acceder a mi aplicación web deben ser del usuario del grupo.

Luego, en la consola de glassfish, tengo que marcar las opciones en: Configuración -> Configuración del servidor -> Seguridad -> Asignación principal a rol predeterminada

Mi pregunta es ¿por qué tengo que marcar este Principal predeterminado para la asignación de roles? ¿Y cómo puedo cambiar mi web.xml para evitar marcarlo?

Muchas gracias

Loic