¿Cómo puede un proveedor de JACC usar las funciones de mapeo de principal a rol del servidor en el que está implementado?

154

Estoy escribiendo un JACCproveedor.

En el camino, esto significa implementar a PolicyConfiguration.

El PolicyConfigurationes responsable de aceptar la información de configuración del servidor de aplicaciones, como qué permisos se acumulan para qué roles. Esto es para que Policymás adelante pueda tomar decisiones de autorización cuando le entregue información sobre el usuario actual y lo que está tratando de hacer.

Sin embargo, no es parte del PolicyConfigurationcontrato (atroz) del 's mantener un mapeo entre roles y sus permisos, y Principalsque están asignados a esos roles.

Por lo general, siempre, realmente, un servidor de aplicaciones aloja esta asignación. Por ejemplo, en GlassFish, que afectan a este mapeo mediante el suministro de cosas como sun-web.xmly sun-ejb-jar.xmly así sucesivamente con los módulos Java EE. (Estos archivos específicos del proveedor son responsables de decir, por ejemplo, si superuserses un grupo al que se le asignará el rol de aplicación admins).

Me gustaría reutilizar la funcionalidad que proporcionan estos archivos, y me gustaría hacerlo para la mayor variedad posible de servidores de aplicaciones.

Aquí está, totalmente arbitrariamente, la opinión de IBM sobre el asunto, lo que parece confirmar mi sospecha de que lo que quiero hacer es esencialmente imposible . (Más municiones para mi caso de que este contrato particular de Java EE no vale el papel en el que está impreso).

Mi pregunta: ¿cómo puedo obtener esta información de mapeo de director a rol en, para empezar, Glassfish y JBoss desde dentro de a PolicyConfiguration? Si hay una forma estándar de hacerlo que desconozco, soy todo oídos.

Laird Nelson
fuente
77
¿Has progresado en este tema? Me gustaría escribir un proveedor JACC también, y también un proveedor de autenticación JASPIC con el fin de crear aplicaciones web portátiles ...
perissf
Esto tampoco suena muy prometedor: Because JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.ver docs.oracle.com/cd/E24329_01/web.1211/e24485/…
Arjan Tijms
2
Mi opinión sobre esto en este momento es que siempre debe asegurarse de que su proveedor JACC esté acoplado a un proveedor JASPIC que, por lo tanto, también está obligado a escribir. Todavía no he tomado esta ruta, pero está sobre mi mesa intentarlo.
Laird Nelson
@LairdNelson, si tienes tiempo, probablemente deberías escribir una respuesta alrededor de tu comentario JASPIC. Esto suena prometedor, y hay una recompensa de 300 reputación en esta pregunta.
jimhark
55
Hola; no tratando de mantener a nadie en suspenso. :-) No tengo una respuesta aquí que pueda preparar rápidamente. Recuerdo que Ron Monzillo me aconsejó que la única forma de asignar las tareas de director a rol "en" un proveedor de JACC de una manera que pueda comprender es tener la implementación de JASPIC efectivamente acoplada a él.
Laird Nelson

Respuestas:

3

La respuesta corta es: no hay una forma estándar de hacerlo.

Aunque Glassfish y JBoss admiten asignaciones de director a rol, JACC no asume que todos los contenedores lo hacen, por lo que delega la responsabilidad de mantener esas asignaciones en la implementación del proveedor de JACC. De los documentos (ver: PolicyConfiguration.addToRolemétodo ):

El trabajo del proveedor de políticas es garantizar que todos los permisos agregados a un rol se otorguen a los directores "asignados al rol".

En otras palabras, debe implementarlo usted mismo dentro de su proveedor JACC para cada contenedor. Para JBoss, por ejemplo, podría usar una de las subclases de AbstractRolesMappingProvider.

Diego
fuente
Por otro lado, un proveedor portátil podría elegir ignorar la asignación de roles de contenedor; podría suponer, por ejemplo, que cualquier principal implica una función de aplicación con el mismo nombre, a menos que la aplicación de alguna manera (a través de un PolicyContextHandlerproveedor específicamente registrado para ese propósito, por ejemplo) transmita lo contrario. Otro proveedor también podría ignorar la noción de roles por completo (y, por lo tanto, el proporcionado por el contenedor PolicyConfiguration), en lugar de operar únicamente en asignaciones de principal a permiso (proporcionadas por la aplicación) (y donde esos permisos no necesitan limitarse a los de JACC).
Uux
Nota al margen # 2: a partir de Java EE 8, el mapeo de grupo a rol 1: 1 se ha convertido en el nuevo valor predeterminado (que sin embargo solo nos lleva a la mitad, ya que los roles aún deben declararse estáticamente por adelantado, suponiendo que no haya un proveedor JACC personalizado) en efecto).
Uux