Proteccià N Del Servidor WebLogic 12c
Proteccià N Del Servidor WebLogic 12c
Proteccià N Del Servidor WebLogic 12c
Capítulo 1. Conceptos de
seguridad de WebLogic
Asertividad de identidad
Credential Mappers
Java ( JAAS )
Dupdo
@WebServlet("/mysecuredurl")
@ServletSecurity(@HttpConstraint(rolesAllowed={"myrole"}))
public class MySecuredServlet extends HttpServlet {
...
}
Esta única línea de meta-código abre el mundo mágico de la seguridad Java EE,
como se explica en los siguientes puntos:
Si el usuario es no autenticado, el contenedor web le pedirá sus credenciales; cómo
éxito, se creará un contenedor adecuado para los principales del usuario (un Sujeto),
cookie de sesión.
Una vez conocidos los principales del usuario, se asignan a los roles de la aplicación
servidor de aplicaciones.
/javaee/tech/index.html ).
Cada uno de los pasos descritos aquí implica una serie de tareas muy
complejas, y todas ellas son gratuitas para el desarrollador de Java EE; están
hechos detrás de la cortina por el contenedor.
utilizan para desarrollar proveedores de seguridad que se ejecutan bajo los auspicios del
aplicación, como los EJB y los servlets, se comuniquen con los recursos del servidor, con la
Recursos de WebLogic
Java EE 6 define la seguridad de componentes como un EJB o una conexión a
un Enterprise Information System ( EIS ); Los recursos de WebLogic extienden este nivel
de seguridad. La siguiente es una cita que define los recursos de la documentación oficial de
WebLogic 12c:
Supongamos, para Por ejemplo, el contenedor está verificando si el usuario puede acceder
Dupdo
preguntará a su empresa matriz, Enterprise Bean, que puede verificar si el usuario está
autorizado o no.
consultar una aplicación arbitraria para obtener información de diagnóstico sin saber nada
sobre la forma en que se implementa, pero solo con una herramienta estándar como
siguiente manera:
Dupdo
@MXBean
public interface MyManagedProperties {
public int getCached();
public void callOperation();
}
siguiente:
Dupdo
@Singleton
@Startup
public class MyManagedPropertiesBean implements MyManagedProperties {
private MBeanServer platformMBeanServer;
private ObjectName objectName = null;
@PostConstruct
public void registerInJMX() {
try {
objectName = new ObjectName("MyMXBean :type=" +
this.getClass().getName());
InitialContext ctx = new InitialContext();
platformMBeanServer = (MBeanServer)
ctx.lookup("java:comp/env/jmx/runtime");
ctx.close();
platformMBeanServer.registerMBean(this, objectName);
} catch (Exception e) {
throw new IllegalStateException("Problem during registration of
Monitoring into JMX:" + e);
}
}
public int getCached() {//doSomething}
public void callOperation() {//doSomething}
@PreDestroy
public void unregisterFromJMX() {
try {
platformMBeanServer.unregisterMBean(this.objectName);
} catch (Exception e) {
throw new IllegalStateException("Problem during unregistration of
Monitoring into JMX:" + e);
}
}
}
Una MXBeaninterfazse implementa en el código anterior; es un Bean Administrado al que
puede acceder un cliente JMX, que no necesita saber nada sobre nuestra aplicación. Es el
deber del agente convertir cada clase específica de dominio a propiedades simples.
necesario escribir un archivo XML personalizado, llamado MBean Definition File ( MDF ), y
luego generar un archivo JAR que se puede instalar en el servidor WebLogic usando
WebLogic'sHerramienta MBeanMaker.
Proveedores de autenticación
MBean y un LoginModule interfaz. Cada vez que solicita un recurso protegido, se solicita a
cada Proveedor configurado que agregue los principales extraídos de las credenciales
proporcionadas.
página JSP generada automáticamente, sin tocar ningún archivo XML, como se muestra en
puede configurar utilizando el consola estándar. Esto tiene sentido porque la consola y todas
las utilidades que se ejecutan bajo el ecosistema WebLogic deben ser consistentes y hay
WebLogic.Herramienta MBeanMaker.
Cada Proveedor tiene una sola oportunidad de contribuir al proceso de autenticación: recibe
una tarea adecuada para filtros de servlet, pero si están configurados para un recurso
matriz de filtros que se ejecutan en nombre del mecanismo de Autenticación estándar, pero
Autenticación Perimetral
Asertividad de identidad
Credential Mapper
credenciales
JASPIC y Java EE
JACC
Resumen
Usuarios y grupos
Obviamente, aquí puede agregar y configurar algunos usuarios internos y algunos grupos
internos. Un usuario es una entidad que puede ser autenticada y utilizada para proteger
Sección de usuarios
La ruta de la consola parala sección Usuarios es la siguiente:
asistente durante la fase de instalación; también puede crear algunos otros usuarios (nota:
los nombres son insertos insensibles a las mayúsculas y minúsculas) y establecer las
siguientes configuraciones:
Descripción del usuario : una etiqueta de descripción de cadena interna
Preste atención para preservar la integridad del usuario administrativo creado en el asistente
una contraseña (necesarios cuando sea necesario para iniciar la consola de administración
en el sistema operativo como un servicio, sin solicitar ninguna solicitud interactiva) deberá
Dupdo
$DOMAIN_HOME\servers\Adminserver\security\boot.properties
username=weblogic
password=weblogicpassword
Nota
Después del primer arranque, el servidor de administración de WebLogic cifrará este archivo
con su método de cifrado interno.
Sección de grupos
La ruta de la consola para La sección de grupos es la siguiente:
Oracle) cuyos nombres no distinguen entre mayúsculas y minúsculas. Defina nuevos grupos
antes de crear un usuario para asociarlos. Los grupos más importantes son los siguientes:
Todos los usuarios sin un grupo asociado son reconocidos por un rol anónimo . En este
de Reino | Roles
de Reino | Políticas
En WebLogic, puede configurar algunas colecciones de reglas avanzadas para confiar o
BASIC
El disponible las opciones son las siguientes:
Grupo : esta opción agrega el grupo especificado al rol de la misma manera que la
regla anterior
Permitir acceso a todos : esto la opción agrega todos los usuarios y grupos al rol
Denegar acceso a todos : esta opción rechaza que todos los usuarios participen en
el rol
Fecha y hora
Cuando se usa, este rol condición puede configurar una regla basada en una fecha o en un
tiempo (entre, después, antes y especificado) para otorgar una asignación de función.
Elemento de contexto
El servidor recupera información del ContextHandlerobjeto y le permite definir condiciones
de función basadas en los valores de los atributos de solicitud de servlet HTTP, los atributos
Bloqueo de usuario está habilitado por defecto; este proceso evita la intrusión del usuario y
algunas políticas para bloquear a nuestros usuarios configurados locales. Esta opción se
En esta sección, puede definir la cantidad máxima de intentos de inicio de sesión no válidos
consecutivos que pueden ocurrir antes de que se bloquee la cuenta de un usuario y cuánto
automáticamente.
Dupdo
Desbloquear usuario
El resultado de las configuraciones de bloqueo son un usuario bloqueado; si necesita
fase de instalación del asistente en el panel izquierdo debajo de la sección Seguridad . Aquí
puede ver la pestaña Desbloquear usuario , donde puede especificar que el nombre de
usuario se vuelva a habilitar. Recuerde hacer clic en el botón Bloquear y editar antes de
Dupdo
Puede leer una configuración de aplicación de muestra para proteger su recurso y probar los
Configuración de un LDAP
externo para Autenticación /
Autorización
LDAP
Nota
Planifique cualquier cambio en el momento de la configuración en un entorno de
producción, ya que necesita reiniciar el servidor y el servidor de administración.
Haga clic en el botón Bloquear y Editar , vaya al botón Nuevo , nombre a su proveedor con
en Aceptar .
primera comienza en la parte superior. Necesita usar el botón Reordenar para hacerlo.
Te aconsejo que dejes los proveedores predeterminados tal como están. De esta forma,
separe y preserve los grupos y usuarios internos, lo que es más importante, el administrador
Debe crear el mismo nombre de grupo en el proveedor externo y asociarle los usuarios
externos. Para esta regla, recuerde que el servidor de Active Directory también tiene un
configurado.
Bandera de control
La ruta de la consola para trabajar con el parámetro Control Flages Security Realms
del proveedor para que se le otorgue acceso, luego de eso, se ejecutarán los
proveedores subsiguientes.
parte superior (en nuestro caso Active Directory) y cambie a SUFFICIENT todos los
Obviamente, para configurar este proveedor, necesitamos tener una estructura de dominio
de Active Directory configurada con algunos grupos y usuarios, y conocer algunos atributos
buena opción especificar más de un servidor para alta disponibilidad. Si algún host
ejemplotest.directory.int:1090 test2.directory.int:1091
test3.directory.int ,.
Puerto : aquí debe especificar el puerto de escucha del TCP / IP del catálogo global
(predeterminado3268).
Director : Aquí debe especificar una base válida de Active Directory. El usuario
ejemplo, Usuarios ), los objetos de las carpetas personalizadas estarán ouen su ruta
principal de definición.
LDAP.
Usuarios
Los parámetros para Los usuarios son los siguientes:
DN de base de usuario : Aquí, especifica el nombre completo de base, donde
User From Name Filter : Aquí, especifica el filtro correcto para buscar usuarios de
Grupos
Los parámetros para el Las pestañas de Grupos son las siguientes:
líneas que el DN basede usuario y en qué nivel se inicia la consulta LDAP para
Group From Name Filter : Aquí, especifica el filtro para buscar grupos de Active
como(&(cn=%g)(objectclass=group)).
Grupos estáticos
Los parámetros para Los grupos estáticos son los siguientes:
parámetro paracn
parámetro paragroup
completo de los grupos LDAP estáticos que contienen ese miembro y lo configuran
como(&(member=%M)(objectclass=group))
General
Los parámetros generales la sección es la siguiente:
que debe esperar hasta que se establezca la conexión con el servidor LDAP.
una lista de servidores de Active Directory, esto no se usará porque el proceso aún
está esperando una respuesta del primer servidor en la lista. Para una buena
Active Directory; esto nos permite equilibrar el segundo nodo de Active Directory en
la lista.
Límite de reintento de la conexión : este número especifica los intentos totales que
este número a un valor más alto si tiene un solo servidor de Active Directory; de lo
LDAP; establezca este parámetro en uno o más para crear conexiones en paralelo y
milisegundos para que el servidor LDAP espere los resultados antes de que se
KB. Aumente este tamaño si tiene objetos de estructura de Active Directory grandes
Cache TTL : este parámetro especifica cuánto tiempo se vaciará y volverá a cargar
el caché interno. Oracle recomienda un valor de6000. Considere ajustar este valor,
Directory.
Después del inicio, vaya a Security Realms | myrealm | Usuarios y grupos y verifique si
utilizando el enlace Personalizar esta tabla . Aquí, puede insertar un filtro usando una
página.
Opciones de desempeño
En esta sección, puede ajustar algunos parámetros de acuerdo con las dimensiones de
mejorar el rendimiento del servidor; deshabilite esta función solo si tiene recursos del
sistema de servidor WebLogic deficientes o un árbol pequeño de Active Directory sin grupos
anidados.
niveles de membresías del grupo jerárquico o no. Algunas funciones de jerarquía son las
siguientes:
es100. Aumente este valor si tiene muchos grupos anidados. Oracle recomienda un
valor de1024.
membresía de grupo estática silenciosa, aumente este parámetro para reducir las
este valor en10minutos, pero tenga en cuenta todas las consideraciones anteriores.
Caché Validador Principal
La ruta de la consola para trabajar con esta opción es Security Realms | myrealm
Dupdo
Si tiene problemas para conectarse desde el lado de Active Directory, puede buscar algunos
Dupdo
En el mensaje de error anterior, el error result (49) valor del error se encuentra cuando
LDAP 525.
Los siguientes son algunos Códigos de error LDAP y sus descripciones correspondientes:
servidor de Active Directory. Para solucionar este problema, consulte su Nombre de host / IP
o Puerto:
Dupdo
filtro. Este error se encuentra cuando el filtro no puede encontrar ninguna entrada que
la com.novell.ldap.LDAPException clase
de http://developer.novell.com/documentation/jldap/jldapenu/api/com/novell/ldap/LDAPExcep
tion.html o intente buscar la clase LDAPExceptionen la Web usando su motor de búsqueda
favorito.
habilita la opción Bloqueo de usuario con una configuración de Active Directory, recuerde
Piense en esto como un prefiltro que almacenará en caché un estado de usuario (habilitado
Resumen
Ahora lo haremos cree, paso a paso, una aplicación segura utilizando Maven, el
complemento Oracle Maven y, por supuesto, el servidor WebLogic. Un requisito
previo para esto es que Maven 3 se debe instalar y configurar
correctamente. Ver el oficial Mavensitio para obtener información sobre cómo
descargar e instalar Maven, en http://maven.apache.org .
El seguimiento son los pasos que debemos seguir para crear la aplicación que vamos a
comando:
Dupdo
Dupdo
Dupdo
Dupdo
Para probar si todo estaba correctamente configurado, ahora podemos iniciar una
Dupdo
mvn install
el siguiente archivo:
Dupdo
chapter3-ear-1.0-SNAPSHOT.ear
El archivo EAR que se crea está completamente vacío, porque el plugin Maven EAR
examina las dependencias del módulo EAR para crear un módulo empresarial, por lo que
Dupdo
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${parent.artifactId}-ejb</artifactId>
<version>${project.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${parent.artifactId}-web</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
</dependencies>
EAR aún no es una aplicación Enterprise válida para WebLogic; aún necesitamos agregar
un Enterprise Bean en el módulo EJB. El siguiente es el Bean más simple que podemos
codificar:
Dupdo
package net.lucamasini.security;
import javax.ejb.Stateless;
@Stateless
public class MySimpleNoInterfaceBean {
public String echo(String input) {
return "$"+input+"$";
}
}
desarrolladores debe ser de aproximadamente 180 MB). Después obtenemos los binarios,
tenemos que extraer los dos archivos siguientes del archivo utilizando los siguientes
Dupdo
Dupdo
unpack200 -r wlserver/server/lib/wls-maven-plugin.jar.pack
wlserver/server/lib/wls-maven-plugin.jar
Ahora que tenemos todo lo que necesitamos para emitir la instalación del complemento en
Dupdo
cd wlserver/server/lib
mvn install
mvn install:install-file -Dfile=wls-maven-plugin.jar -DpomFile=pom.xml
siguiente manera:
Dupdo
<pluginGroups>
<pluginGroup>com.oracle.weblogic</pluginGroup>
</pluginGroups>
siguiente manera:
Dupdo
Ahora solo necesitamos un dominio para comenzar, con un nombre de usuario y contraseña
Dupdo
Propina
Máquina virtual Java de 64 bits
Dupdo
Dupdo
mvn wls:start-server
Si todo está bien, podemos alinear el archivo de salida (busque en el registro de comando
Dupdo
Otra prueba que puede hacer es verificar si podemos detenerlo con gracia, usando lo
siguiente:
Dupdo
Dupdo
<build>
<plugins>
<plugin>
<groupId>com.oracle.weblogic</groupId>
<artifactId>wls-maven-plugin</artifactId>
<version>12.1.1.0</version>
<configuration>
<user>weblogic</user>
<password>weblog1c</password>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
Propina
Depuración de su aplicación Enterprise
A menudo tenemos que adjuntar un depurador a nuestra aplicación en ejecución; para esto
podemos exportar la siguiente variable de entorno antes de ejecutar el objetivo de servidor
de inicio. De esta forma, la Máquina Virtual Java aceptará conexiones en el 55822puerto
desde el depurador local / remoto.
Dupdo
export JAVA_OPTIONS="-Xdebug -
Xrunjdwp:transport=dt_socket,address=127.0.0.1:55822,suspend=n,server=y"
Ahora que tenemos nuestra aplicación simple y estamos ejecutando el Servidor WebLogic,
comando:
Dupdo
mvn install
Este comando se ejecuta en la carpeta POM raíz. Desde la carpeta del módulo EAR, ejecuta
lo siguiente:
Dupdo
wls:deploy -Dname=chapter3-ear
Hay muchos razones por las que no puede considerar esto como un ciclo de vida de
desarrollo ágil, pero la razón principal es que debe volver a empaquetar toda la aplicación
Pero no puede usarlos de fábrica en su aplicación Maven, debido a las siguientes razones:
Para resolver el problema del intercambio rápido, puede usar una JVM que admita la
recursos).
Resolver el problema de despliegue dividido nos lleva a escribir algunas configuraciones de
Dupdo
<pluginRepositories>
<pluginRepository>
<id>beabuild.release</id>
<name>Beabuild Release Repository</name>
<url>http://maven-beabuild-
plugin.googlecode.com/svn/maven2/releases</url>
</pluginRepository>
</pluginRepositories>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>beabuild-generator-plugin</artifactId>
<version>0.9.3</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate-beabuild</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Dupdo
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>beabuild-generator-plugin</artifactId>
</plugin>
nombrado .beabuild.txt . Esto contendrá un catálogo que WebLogic utilizará en lugar del
sabe cómo funciona Maven, por lo que encontrará en esos archivos todas las dependencias
requeridas en tiempo de ejecución a las que se hace referencia como bibliotecas, clases en
Al trabajar de esta manera, podemos olvidarnos de empacar nuestra aplicación; todo lo que
tenemos que hacer es realizar una instalación desde la carpeta raíz cada vez que
Dupdo
<name>${project.artifactId}</name>
<source>${basedir}/src/main/application</source>
aplicación Java EE 6, pero que es necesario para WebLogic cuando utilizamos este tipo de
Dupdo
<executions>
<execution>
<id>generate-application-xml</id>
<phase>install</phase>
<goals>
<goal>generate-application-xml</goal>
<goal>ear</goal>
</goals>
</execution>
</executions>
siguiente código:
Dupdo
<generatedDescriptorLocation>${project.basedir}/src/main/application/META-
INF/</generatedDescriptorLocation>
<earSourceExcludes>.beabuild.txt</earSourceExcludes>
sucio. Ahora podemos ejecutar installdesde el módulo raíz por primera vez para
Dupdo
mvn install
De ahora en adelante, despliegue nuestra aplicación desde el módulo EAR con solo el
Dupdo
mvn wls:deploy
Para resumir, usando una JVM que recarga clases y recursos y el plugin de beabuild,
Ahora que nosotros tener un servidor WebLogic en ejecución y una aplicación configurada
manera:
Dupdo
mvn wls:deploy
inicio en acción.
Dupdo
package net.lucamasini.security;
@WebServlet(name="MyWorkServlet",
urlPatterns={"/myprotectedresource"})
public class MyProtectedServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
Principal userPrincipal = req.getUserPrincipal();
resp.getWriter().println(userPrincipal!=null?userPrincipal.getName():
"anonymous");
}
}
Ahora podemos ir un paso más allá y proteger el recurso web. Nuevamente, una
anotación simple hace el trabajo sin la necesidad de editar web.xml, de la
siguiente manera:
Dupdo
@ServletSecurity(@HttpConstraint(rolesAllowed={"my-user"}))
Si, en cambio, no podemos saber de antemano cuáles son los usuarios y cuáles
son los grupos, necesitamos cambiar esas asignaciones sin redistribución, o si la
asignación es demasiado compleja para definirla mediante una relación de uno a
varios (un rol asignado a muchos principios), tenemos otro oportunidad en
WebLogic usando su tiempo de ejecución personalizado Roles Mapper.
Mapeo estándar de DD
Comencemos con el mapeo DD estándar. Para esto, finalmente, necesitamos escribir XML,
Dupdo
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<security-role-assignment>
<role-name>my-user</role-name>
<principal-name>users</principal-name>
</security-role-assignment>
</weblogic-web-app>
Aquí, estamos utilizando uno de los grupos integrados en WebLogic; todos los usuarios son
implícitamente también miembros del usersgrupo, y esta vez llamar a la URL funcionará y
El mapeo de roles es hecho por WebLogic Server XACML Role Mapping Provider, que nos
permite usar la consola o su MBEan en tiempo de ejecución, para declarar roles bajo ciertas
condiciones. De hecho, podemos hacer todo lo que hace el DD estándar, como declarar un
rol si uno o más grupos son directores del tema actual, pero también declarar reglas como
está en modo de desarrollo o no en el grupo. Para obtener una lista completa, puede ver la
documentación oficial.
Ahora comenzamos a hacer lo mismo en el DD, es decir, declarar que cada director que
está en el usersgrupo tiene el rol my-user. Podríamos hacer esto de una manera muy
rápida e intuitiva utilizando la consola web, pero en este capítulo haremos todo lo posible
siguiente contenido:
Dupdo
connect('weblogic','weblog1c')
xacml =
cmo.getSecurityConfiguration().getDefaultRealm().lookupRoleMapper('XACMLRoleMa
pper')
xacml.createRole(None,'my-user',None)
xacml.setRoleExpression(None,'my-user', 'Grp(users)')
Y luego corre el siguiente script WLST con el plugin Maven:
Dupdo
Al hacer esto, creamos una función global llamada my-userque podemos verificar debajo de
Propina
Roles de implementación
No estamos limitados a crear roles globales; también podemos crear un rol que sea local
para una aplicación implementada específica
Seguridad programática
Hay ciertas situaciones cuando no podemos confiar solo en la seguridad declarativa; cuando
necesitamos otro nivel de inteligencia para entender si el usuario puede o no puede acceder
bastante primitiva: una lista de principios en O lógico; no es suficiente para muchos casos de
negocios.
Imagine, por ejemplo, que necesita verificar si un usuario es miembro de al menos dos
grupos, si la hora del día está en un cierto rango o si el usuario está en una tabla de
negocios.
En todos estos casos, necesitamos codificar la seguridad de nuestra aplicación, y Java EE
no ayuda mucho. En el nivel web, solo tenemos una llamada API que nos puede decir si un
Dupdo
resp.getWriter().
println("my-user: "+req.isUserInRole("my-user"));
Ahora, llamando a nuestro La URL también mostrará my-user: true , porque también
estamos usando seguridad declarativa para permitir el acceso a ese recurso. Por lo general,
usa las Funciones del cliente. De hecho, cuando declaramos nuestros roles tenemos una
Dupdo
Grp(users)&Grp(Administrators)
y el rango de horas
Elementos contextuales, como la solicitud HTTP actual o el puerto del socket
El uso del proveedor de asignación de roles XACML de forma correcta puede evitar que
ubicarlos dentro del mismo módulo cliente WAR y simplificar nuestra arquitectura de
Comencemos simple; podemos codificar este StatelessBean realmente simple sin vista de
Dupdo
package net.lucamasini.security;
import javax.ejb.Stateless;
@Stateless
public class NoInterfaceBeanInWarModule {
public String echo(String input) {
return "$"+input+"$";
}
}
Este archivo Java debe estar en la misma carpeta que contiene nuestro servlet, y también
Dupdo
@EJB
private NoInterfaceBeanInWarModule service;
Dupdo
resp.getWriter().println("echo:"+service.echo("echo"));
Nada especial hasta ahora, podemos encontrar muchos tutoriales que nos muestran cómo
hacer esto. Si llamamos a la URL habitual ahora, veremos otra línea en el navegador que
muestra lo siguiente:
echo: $ echo $
Propina
¿Cuándo a menudo cambiamos los metadatos?
clase Bean:
Dupdo
@RolesAllowed("my-user")
Ahora, al volver a llamar a la URL, veremos el mismo resultado, pero ahora Bean está
protegido. De hecho, cada llamada a cualquier método verificará si el principal tiene el my-
userrol, y si no se generará un error de seguridad. Comprobemos esto agregando la misma
anotación al único método con otra función, de la siguiente manera:
Dupdo
@RolesAllowed("my-special-user")
Dupdo
La excepción es muy clara y nos dice que la conexión actual useres weblogic, y también
muestra la firma del método que estamos tratando de llamar, para permitirnos identificar
podemos agregar las siguientes dos líneas a la create-roles.py Archivo Python utilizado
Dupdo
xacmlRoleMapper.createRole(None,'my-special-user',None)
xacmlRoleMapper.setRoleExpression(None,'my-special-user', 'Grp(users)')
Dupdo
Esto soluciona el problema y nos permite ejecutar nuestro servlet de nuevo. Pero queremos
ir un paso más allá y configurar esto usando un grupo diferente y el descriptor de despliegue
personalizado de WebLogic.
El primer paso es configurar el servidor LDAP interno, crear un nuevo bookreadersgrupo y
luego agregar un nuevo usuario luca,a ese grupo. Esto se puede hacer con la Consola de
Dupdo
Mediante la redistribución de nuestro ejemplo, ahora podemos llamar con éxito nuestra URL
Hay algunos usos casos en los que necesitamos llamar a algunos métodos comerciales sin
tener el derecho de hacerlo. Por ejemplo, es posible que deba llamar a un método que los
La solución para ese caso de uso es la RunAs anotación, que nos permite suplantar a
cualquier principal, porque por defecto Java EE confía en las identidades entre los
Dupdo
@RunAs("my-special-user")
Por supuesto, luego debemos especificar el usuario real que se ejecutará con esa función,
Dupdo
<run-as-role-assignment>
<role-name>my-special-user</role-name>
<run-as-principal-name>weblogic</run-as-principal-name>
</run-as-role-assignment>
Por supuesto, si su EAR tiene muchas WAR que comparten lógica comercial, esta es la
Resumen
Principals a WebLogic
Como veremos, el trabajo más difícil será configurar a Maven para que tenga un
proyecto reproducible y listo para la industria que pueda crear el archivo MBean
JAR para nosotros.
El proyecto Maven
Propina
WebLogic MBeanMaker
Esta es una utilidad de línea de comandos que genera todos los archivos que necesita para
formar un Tipo MBean , desde clases parciales de Java hasta interfaces de contrato y
algunos archivos personalizados utilizados por WebLogic para introspectar el MBean una
vez que se implementa en JAR dentro del cargador de clases del sistema.
Pero todo esto tiene sentido si queremos tener una pieza de software que pueda
integrarse en los sistemas de compilación modernos, y si queremos tener un
buen entorno de desarrollo donde podamos trabajar en un ciclo de vida de
ejecución de escritura.
Comenzaremos de manera simple, con el El POM de Maven más corto y simple que
Dupdo
<groupId>net.lucamasini.security</groupId>
<artifactId>chapter-4-auth-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
Aquí, no especificamos un POM padre y dejamos el empaque estándar JARtal como está,
Dependencias
compilar. Los diferentes binarios que se deben agregar se explican en los siguientes pasos:
código:
Dupdo
<dependency>
<groupId>com.bea.core</groupId>
<artifactId>commons.security.api</artifactId>
<version>1.1.0.0_6-2-0-0</version>
<scope>system</scope>
<systemPath>
${middleware.home}/modules/
com.bea.core.common.security.api_1.1.0.0_6-2-0-0.jar
</systemPath>
</dependency>
2. Luego, necesitamos agregar un JAR que contenga las clases que usaremos en
fragmento de código:
Dupdo
<dependency>
<groupId>com.bea.core</groupId>
<artifactId>weblogic.security</artifactId>
<version>1.1.0.0_6-2-0-0</version>
<scope>system</scope>
<systemPath>
${middleware.home}/modules/
com.bea.core.weblogic.security_1.1.0.0_6-2-0-0.jar
</systemPath>
</dependency>
3. Finalmente, necesitamos el mega JAR de WebLogic, donde se encuentran la
Dupdo
<dependency>
<groupId>oracle</groupId>
<artifactId>weblogic</artifactId>
<version>${weblogic.version}</version>
<scope>system</scope>
<systemPath>
${middleware.home}/wlserver/server/lib/weblogic.jar
</systemPath>
</dependency>
4. Como puede ser visto desde esta primera pieza de POM, necesitamos agregar dos
el siguiente código:
Dupdo
<middleware.home>/path/to/wls1211_dev</middleware.home>
código:
Dupdo
<weblogic.version>12.1.1.0</weblogic.version>
Otro paso fácil es reconfigure algunos plugins comunes de Maven, como la compilación y
Dupdo
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<id>default-install</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${domain.dir}/lib/mbeantypes
</outputDirectory>
<resources>
<resource>
<directory>
${project.build.directory}
</directory>
<includes>
<include>
${project.build.finalName}.jar
</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Aquí, configuramos UTF-8 como codificación estándar para que sea independiente de la
Dupdo
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
Como ahora explicado, el MBeanMaker de WebLogic se encarga de empaquetar el artefacto
el objetivo de instalación listo para usar no tiene ningún sentido en este entorno, por lo que
fragmento de código:
Dupdo
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-jar</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
Podemos ver que para desactivar uno de los plugins estándar de Maven, todo lo que
para Proveedores personalizados. Para eso tenemos que definir una nueva propiedad, como
Dupdo
<domain.dir>/path/to/your/domain</domain.dir>
Ahora otro plugin, esta vez es un plugin personalizado del proyecto Mojo de Codehaus, uno
que hace algo que Maven debería hacer por sí mismo: agregar otra carpeta fuente.
Muy a menudo tiene más de un lugar donde sourcesse colocan porque uno de ellos fue
Maven. Afortunadamente, este simple complemento que hace muchas otras cosas
interesantes, nos permite agregar otras carpetas como sourcecarpetas. Este complemento
Dupdo
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${generated.sources.dir}</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
manera:
Dupdo
<generated.sources.dir>
${project.build.directory}/generated-source
</generated.sources.dir>
personalizadas generadas.
La última tarea simple que haremos dentro de este POM es habilitar el filtrado de
Dupdo
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
siguiente:
Un conjunto de API
Dicho esto, es una pieza de software realmente antigua y está ligada a WebLogic y su
Por supuesto, la primera es una mejor solución que nos puede ahorrar mucho tiempo
configurando el POM, pero necesita tener algo de tiempo para escribirlo y mantenerlo
Usar la última solución en su lugar es mucho menos elegante porque necesitamos escribir
alguna configuración antigua de Ant XML. Pero de esta manera es muy fácil integrarlo con
Maven.
Dicho esto, exploraremos la segunda solución y configuraremos Ant para que ejecute el
generador para nosotros. Lo primero que debe hacer es configurar el complemento y sus
Dupdo
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<dependencies>
<dependency>
<groupId>weblogic</groupId>
<artifactId>weblogic</artifactId>
<version>${weblogic.version}</version>
<scope>system</scope>
<systemPath>
${middleware.home}/wlserver/server/lib/weblogic.jar
</systemPath>
</dependency>
</dependencies>
<executions>
…
…
Dupdo
<execution>
<id>generate-mbean</id>
<phase>process-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<java fork="true"
classname="weblogic.management.commo.WebLogicMBeanMaker"
classpathref="maven.plugin.classpath">
<jvmarg
value="-DMDF=${project.build.outputDirectory}/
PacktSiteUsersAuthentication.xml" />
<jvmarg
value="-Dfiles=${project.build.outputDirectory}" />
<jvmarg value="-DcreateStubs=true" />
<jvmarg value="-Dverbose=true" />
</java>
</tasks>
</configuration>
</execution>
Aquí, lanzamos el MBeanMaker de WebLogic diciéndole que analice el archivo XML dentro
de la carpeta de salida. Esto funciona porque vinculamos esta ejecución con el process-
los apéndices existentes (no en nuestro caso porque estamos usando una carpeta
código:
Dupdo
<execution>
<id>generate-jar</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<java fork="true"
classname="weblogic.management.commo.WebLogicMBeanMaker"
classpathref="maven.plugin.classpath">
<jvmarg value="-DMJF=${jar.file}" />
<jvmarg value="-Dfiles=${project.build.outputDirectory}" />
<jvmarg value="-DcreateStubs=true" />
<jvmarg value="-DpreserveStubs=true" />
<jvmarg value="-Dverbose=true" />
<arg value="-preserveStubs" />
</java>
<move
todir="${generated.sources.dir}/${package.dir}"
file="${project.build.outputDirectory}/
PacktSiteUsersAuthenticationImpl.java" />
<move todir="${generated.sources.dir}">
<fileset
dir="${project.build.outputDirectory}">
<include name="**/*.java" />
</fileset>
</move>
</tasks>
</configuration>
</execution>
Por supuesto, aquí necesitamos definir dos nuevas propiedades de Maven; los primeros
puntos del archivo JAR que queremos que se generen, como se muestra en el siguiente
fragmento de código:
Dupdo
<jar.file>
${project.build.directory}/${project.build.finalName}.jar
</jar.file>
El segundo se usa para preservar la estructura del paquete durante la tarea de movimiento,
Dupdo
<package.dir>
net/lucamasini/security
</package.dir>
Maven la configuración ahora está completa. Este POM se puede utilizar como una plantilla
para cada Proveedor de autenticación que tenemos que hacer, y podemos proceder a la
Dupdo
Por supuesto, la etiqueta principal se nombra MBeanTypey define cómo se generará la clase
Dupdo
<MBeanType
Name = "PacktSiteUsersAuthentication"
DisplayName = "PacktSiteUsersAuthentication"
Package = "net.lucamasini.security"
Extends =
"weblogic.management.security.authentication.Authenticator"
PersistPolicy = "OnUpdate"
>
Cada atributo de esta etiqueta es muy importante, comenzando con el nombre que se usará
para definir un nuevo tipo de esquema XML para el espacio de nombres de seguridad dentro
Dupdo
<sec:authentication-provider
xmlns:ext="http://xmlns.oracle.com/weblogic/security/extension"
xsi:type="ext:packt-site-users-authenticationType">
<sec:name>packt</sec:name>
<sec:control-flag>OPTIONAL</sec:control-flag>
</sec:authentication-provider>
Aquí, podemos ver que xsi:typees el nombre de MBean rebajado, con un -signo entre
autenticación.
Dupdo
mvn install
Este proveedor es todavía no es un proveedor que funciona, pero podemos echar un vistazo
Se puede instalar bajo la consola de WebLogic, pero luego WebLogic se negará a comenzar
aparte de esto, WebLogic sabe lo que acabamos de generar y trata de usarlo (si está
del config.xmlarchivo).
Mirando dentro de la carpeta de destino, podemos observar una clase especial en
nombrará CHAPTER4_AUTH_PROVIDER_1_0_SNAPSHOT1345106773809855000BeanInfoF
actory. Se denomina con el nombre del archivo MBean JAR junto con la hora actual en
milisegundos, que es diferente cada vez que hacemos la instalación (para eso siempre
recuerde hacer una limpieza antes de la instalación). Esta clase es una fábrica que, dada la
implementación MBean.
Dupdo
<MBeanAttribute
Name = "ProviderClassName"
Type = "java.lang.String"
Writeable = "false"
Default = ""net.lucamasini.security.PacktAuthProviderImpl""
/>
archivo XML.
especificado qué clase será nuestra implementación de MBean y WebLogic intenta crear
Los siguientes dos atributos que vamos a agregar son los que el administrador de WebLogic
Dupdo
<MBeanAttribute
Name = "Description"
Type = "java.lang.String"
Writeable = "false"
Default = ""WebLogic Packt Authentication Provider""
/>
<MBeanAttribute
Name = "Version"
Type = "java.lang.String"
Writeable = "false"
Default = ""1.0""
/>
En descriptiony version, podemos agregar lo que prefiramos; estas son dos cadenas
propiedades.
Finalmente, agregamos una propiedad de configuración real, la URL que usará nuestro
proveedor para interactuar con nuestro sistema SSO heredado, como se muestra en el
siguiente código:
Dupdo
<MBeanAttribute
Name = "URL"
Type = "java.lang.String"
Writeable = "true"
Default = ""${authentication.services.url}""
/>
en un De manera diferente a los otros atributos, esto también se puede escribir usando la
sistema. No estamos codificando el URL dentro del archivo MDF, sino usando el filtrado de
recursos de Maven para poder configurar este parámetro dentro de nuestro POM, tal vez
Por supuesto, nuestro POM debe estar enriquecido con la siguiente propiedad nueva:
Dupdo
<authentication.services.url>
http://localhost:8080/sso.jsp
</authentication.services.url>
Nuestra configuración de archivos MDF está completa. Ahora podemos codificar la clase de
Escribir la implementación de
MBean
Dupdo
{
private static final Logger LOGGER =
Logger.getLogger(PacktAuthProviderImpl.class.getSimpleName());
@Override
public void initialize(ProviderMBean mbean, SecurityServices services) {
LOGGER.info("PacktAuthProviderImpl.initialize");
}
@Override
public String getDescription() {
return null;
}
@Override
public void shutdown() {
LOGGER.info("PacktAuthProviderImpl.shutdown");
}
@Override
public AppConfigurationEntry getLoginModuleConfiguration() {
return null;
}
@Override
public AppConfigurationEntry getAssertionModuleConfiguration() {
return null;
}
@Override
public PrincipalValidator getPrincipalValidator() {
return null;
}
@Override
public IdentityAsserterV2 getIdentityAsserter() {
return null;
}
}
Dupdo
net.lucamasini.security.PacktAuthProviderImpl initialize
INFO: PacktAuthProviderImpl.initialize
Inicializando el proveedor
Cada marco tiene su propio ciclo de vida, y cada ciclo de vida tiene un comienzo y un
objetos personalizados sino también obtener la configuración del MBean que envuelve
necesitamos hacer nada dentro shutdown, por lo que dejaremos el actual que registra una
Dupdo
PacktSiteUsersAuthenticationMBean myMBean =
(PacktSiteUsersAuthenticationMBean) mbean;
Ahora que tenemos nuestra instancia específica, podemos guardar la configuración para su
Dupdo
Aquí descriptiony urlhay dos campos de cadena de instancia. También tenemos que
una versión de JAAS de un tipo de enumeración (estilo antiguo de Java) que nos dice si
manera:
Dupdo
servidor de WebLogic para que podamos estar seguros de que llamamos al parámetro
correcto y nuestro código de análisis simple funciona bien. Usa el siguiente código:
Dupdo
LOGGER.info("ControlFlag: "+controlFlag);
LOGGER.info("Description: "+description);
LOGGER.info("URL: "+url);
código:
Dupdo
@Override
public String getDescription() {
return description;
}
eso podemos usar un validador integrado que viene con WebLogic, como se muestra en el
Dupdo
@Override
public PrincipalValidator getPrincipalValidator() {
return new
weblogic.security.provider.PrincipalValidatorImpl();
}
Dupdo
@Override
public AppConfigurationEntry getLoginModuleConfiguration() {
return new AppConfigurationEntry(
"net.lucamasini.security.PacktLoginModuleImpl",
controlFlag,
new HashMap<String, Object>() {{
put("url", url);
}}
);
}
@Override
public AppConfigurationEntry getAssertionModuleConfiguration() {
return getLoginModuleConfiguration();
}
Ahora podemos instalar e iniciar WebLogic. Extrañamente, no se quejará del hecho de que
autenticación durante el proceso de inicio de sesión. Esto puede verse como un error, pero
busque PacktLoginModuleImpl .
Por suerte, LoginModule utiliza una API JAAS estándar y, como tal, está bien
documentada en muchos libros y en Internet. Aquí, vamos a escribir el más
simple LoginModuleque resuelve nuestro problema de validación de los
principales sobre un sistema SSO externo heredado que utiliza el protocolo
HTTP. Como ayuda didáctica, también escribiremos en el registro cuando el
contenedor de Servicios de seguridad llamará a nuestro método para que
podamos averiguar cuándo y cuántas veces se llaman.
Tenga en cuenta que LoginModulees un Bean con estado; debe retener los datos
de configuración cuando se inicializa, y desde el estado de devolución de
llamada al estado de confirmación (o abortar o lo que sea) debe mantener el
estado para responder de una manera correcta y esperada.
Comencemos con la definición; los campos de instancia se declararán como y
cuando los necesitemos. El código para nuestra costumbre LoginModule es como
sigue:
Dupdo
public void
initialize( Subject subject, CallbackHandler callbackHandler, Map
sharedState, Map options )
{
LOGGER.info("PacktLoginModuleImpl.initialize");
this.subject = subject;
this.callbackHandler = callbackHandler;
this.url = options.get("url").toString();
}
url: Esta es nuestra propia configuración, la URL del sistema SSO heredado
código:
Dupdo
Como dijimos, decidimos registrar todas nuestras llamadas a este método LoginModule ,
pero lo primero que debemos hacer es definir qué Callbackmétodos nos darán la
información correcta para aceptar o rechazar la identidad del usuario, como se muestra en el
Dupdo
try {
callbackHandler.handle(callbacks);
} catch (Exception e) {
LOGGER.throwing("PacktLoginModuleImpl", "login", e);
throw new LoginException(e.getMessage());
}
Aquí definimos dos Callbackmétodos, uno que pedirá al sistema un nombre de usuario y
Dupdo
método).
Dupdo
SSO no puede validar a nuestro usuario. Si todo está bien, podemos declarar un inicio de
sesión exitoso y guardar nuestros principios para uso posterior, como se muestra en el
Dupdo
loginSucceeded = true;
principalsForSubject.add(new WLSUserImpl(userName));
principalsForSubject.add(new WLSGroupImpl("Packt"));
return loginSucceeded;
}
siguiente manera:
Dupdo
JAASLMDevGuide.html # commit ).
método simple no puede fallar en el caso de un inicio de sesión exitoso, por lo que
fragmento de código:
Dupdo
@Override
public boolean commit() {
LOGGER.info("PacktLoginModuleImpl.commit");
if (loginSucceeded) {
subject.getPrincipals().addAll(principalsForSubject);
principalsInSubject = true;
return true;
} else {
return false;
}
}
caso de abort().
El siguiente código muestra una implementación simple ya que abort()no puede fallar:
Dupdo
@Override
public boolean abort() {
LOGGER.info("PacktLoginModuleImpl.abort");
if( !loginSucceeded ) {
return false;
}
if (principalsInSubject) {
subject.getPrincipals().
removeAll(principalsForSubject);
principalsInSubject = false;
}
return true;
}
de código:
Dupdo
@Override
public boolean logout() throws LoginException {
LOGGER.info("PacktLoginModuleImpl.logout");
if( principalsInSubject ) {
if( !subject.isReadOnly() ) {
subject.getPrincipals().removeAll(principalsForSubject);
} else {
for(Principal principal: principalsForSubject ) {
if( principal instanceof Destroyable ) {
try {
((Destroyable)principal).destroy();
} catch (DestroyFailedException e) {
LOGGER. throwing("PacktLoginModuleImpl", "logout", e);
throw new LoginException("cannot destroy principal " +
principal.getName());
}
} else {
throw new LoginException("cannot destroy principal
"+principal.getName());
}
}
}
}
return true;
}
Como podemos ver en el código anterior, la implementación debe eliminar o destruir los
este LoginModule, teniendo cuidado de no tocar los principales agregados por otros
Podemos hacer una instalación limpia nuevamente de vez en cuando, nuestro proveedor de
Antes de que podamos ejecutar nuestro Proveedor, tenemos que emular el sistema de SSO
heredado. Hacemos esto ahora con un JSP simple, como se muestra en el siguiente
fragmento de código:
Dupdo
servidor Tomcat que se ejecute en el puerto 8080 . En caso de que use otro puerto (o para
agregar una ruta de contexto), la authentication.services.urlpropiedad debe ser
actualizado
Ejecutando el proveedor
que el usuario actual no tiene suficientes privilegios para ejecutar el método EJB. Se
Dupdo
Esto no es un error sino un efecto deseado; es solo que nuestro testuserno tiene derecho
a llamar al método EJB. En caso de que desee ver que una ejecución funciona bien,
siguiente código:
Dupdo
//resp.getWriter().println("echo:"+service.echo("echo"));
Alternativamente, modifique el EJB para que este usuario sea lo suficientemente potente
como para ejecutarlo. Es un buen ejercicio mapear un nuevo rol para el grupo que está
Si ahora miramos el registro de WebLogic, podemos ver que nuestros métodos de ciclo de
Dupdo
INFO: PacktLoginModuleImpl.initialize
INFO: PacktLoginModuleImpl.login
INFO: PacktLoginModuleImpl.commit
Resumen
de configuración de destino.
token Kerberos válido en caché con sus credenciales; puede verificar si el token se genera
correctamente con algunas herramientas potentes, que son muy útiles durante las sesiones
de diagnóstico.
en http://www.microsoft.com/en-us/download/details.aspx?id=17657 .
Kerbtray es una herramienta de Microsoft gráfica y fácil de usar que mostrará una lista
clave:
También puede usar esta herramienta para limpiar su caché de tokens local haciendo clic
Klist es unlínea de comandos que le permitirá ver y limpiar sus cachés de tokens
locales; con este comando puede escribir fácilmente un comando por lotes para pilotar o
Dupdo
klist > c:\token.list.txt
Es muy importante verificar si esta configuración del navegador del cliente está
Para verificar su configuración, haga clic con el botón derecho en el ícono de Internet
Propina
Reiniciar el navegador de Internet Explorer
Si está utilizando un servidor proxy, asegúrese de que sus nombres de dominio locales
estén en el campo de excepciones; esto permite una conexión directa de cliente a servidor
sin pasar por un servidor proxy y preserva el token enviado.
Es esencial registrar un Registro DNS que se utilizará para acceder a la aplicación de inicio
Es aconsejable registrar todos los nombres de host en su escenario: nodos WebLogic (por
ejemplo, un dispositivo equilibrador de carga de red), nodos de servidor web y cualquier otra
IP virtual existente y asociada. Esta información nos permitirá registrar todos los nombres
principales del servicio ( SPN s), que están habilitados para marcar un acceso de inicio de
sesión único de confianza en su aplicación en cualquier nivel. Esto es poderoso cuando
La entrada de DNS puede proporcionarse con el servicio DNS interno de Active Directory, o
externamente con algún servidor DNS de dispositivo o algún servidor DNS compatible con el
En el Active Directory lado, necesitamos crear un usuario técnico para asociar el nombre
tokens.
Propina
Marque esta opción solo si está usando Active Directory ejecutándose en Windows Server
2003.
Si está utilizando JVM 6 (o una versión posterior) y Windows Server 2008, no marque esta
opción; al hacerlo, podemos configurar el método de encriptación como RC4 HMAC. Este
tipo de cifrado no necesita ninguna otra configuración de usuario técnico de Active Directory.
Además, considere que Oracle certifica que los clientes de Internet Explorer 8.0 y FireFox
7.0.1, que acceden a las cuentas de usuario definidas en Active Directory y están cifrados
con los tipos AES-128, AES-256 o RC4, se ejecutarán en una plataforma Windows 7
Enterprise.
Ahora necesitamos agregar nuestro nombre principal de servicio en este usuario; para
acceder a él debemos utilizar un usuario con privilegios de Active Directory, ya que pueden
Dupdo
Dupdo
setspn -A HTTP/wls1.dom.int technicaluser
El comando anterior asocia la URL del Servidor WebLogic con el dominio completo
Para verificar su entrada de usuario del Nombre principal de servicio registrado, use el
siguiente comando:
Dupdo
setspn -L technicaluser
Algunas reglas importantes al crear un usuario técnico con Active Directory son las
siguientes:
técnico
No defina ningún puerto TCP en el Nombre principal del servicio; un solo registro
Dupdo
[libdefaults]
default_realm = DOM.INT
ticket_lifetime=600
default_tkt_enctypes = rc4-hmac aes128-cts des3-cbc-sha1 des-cbc-md5 des-
cbc-crc
default_tgs_enctypes = rc4-hmac aes128-cts des3-cbc-sha1 des-cbc-md5 des-
cbc-crc
permitted_enctypes = rc4-hmac aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-
crc
[realms]
LOCAL.DOM.INT = {
kdc = dc0.local.dom.int:88
default_domain= DOM.INT
}
[domain_realm]
.dom.int = DOM.INT
[appdefaults]
autologin = true
forward = true
forwardable = true
encrypt = true
En una máquina Windows en el dominio con una instalación JDK (es mejor usar la misma
versión JDK que está instalada en el lado del servidor), use el siguiente comando en una
Dupdo
Dupdo
Done!
Service key for technicaluser is saved in
c:\Programs\jdk1.6.0_02\bin\jdk1.6.0_02\bin\keytabname.keytab
Dupdo
c:\Programs\jdk1.6.0_02\bin\klist.exe -e -f -t -K –k
c:\Programs\jdk1.6.0_02\bin\jdk1.6.0_02\bin\keytabname.keytab
Dupdo
Propina
krb5.conf keytabname.keytab
Este archivo, en el lado del servidor, debe ser legible y accesible para el usuario que inicia el
servidor de WebLogic.
Cuando en su servidor utiliza una JVM con una versión superior a la 1.6 actualización 21,
cambia su contraseña en el KRDC. Cuando este número no coincide con el que tenemos en
el ktpasscomando).
2. Recupere el número correcto de KVNO con la utilidad "kvno" y luego ejecute keytab
el número exacto de veces para permitir que el número aumente al mismo nivel.
Este es otro archivo importante que le dice al servidor de WebLogic que use el módulo de
inicio de sesión de Kerberos, donde se encuentran los archivos keytab, y también la ruta del
Dupdo
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
principal="[email protected]" useKeyTab="true"
keyTab="keytabname.keytab" storeKey="true" debug="false";
};
com.sun.security.jgss.krb5.accept {
com.sun.security.auth.module.Krb5LoginModule required
principal="[email protected]" useKeyTab="true"
keyTab="keytabname.keytab" storeKey="true" debug="false";
};
Propina
krb5Login.conf
Este archivo del lado del servidor debe ser legible y accesible para el usuario que inicia el
servidor WebLogic.
Dupdo
-Djava.security.auth.login.config=krb5Login.conf
-Djavax.security.auth.useSubjectCredsOnly=false
-Dsun.security.krb5.debug=false
-Dweblogic.security.enableNegotiate=true
-Djava.security.krb5.conf=krb5.conf
-Dweblogic.wsee.component.exception=false
-DDebugSecurityAdjudicator=false
múltiples nodos en su clúster, debe aplicar estos parámetros para cada uno de ellos.
Configuración de asertor de
identidad SPNEGO
Haga clic en el botón Bloquear y Editar para bloquear y editar su dominio, pasar
al botón Nuevo (nombrar a su proveedor con una referencia personal) y
seleccionar el proveedor Negociar Aserción de Identidad de la lista y hacer clic
en Aceptar . Vuelva a ordenar la secuencia del proveedor en la parte superior
después de configurar LDAP (consulte el Capítulo 2 , Reino de seguridad de
WebLogic ). Después de todas estas modificaciones, reinicie todos los nodos de
su servidor WebLogic, junto con la consola de administración, para que sus
cambios sean efectivos.
Problemas de depuración
un análisis del lado del cliente con un rastreador de red, por ejemplo, Wireshark. Deberá
verificar si se envía su token de Kerberos. Filtre su tráfico de red para los protocolos KRB5 y
utilizando el puerto TCP 88( puerto TCP predeterminado para comunicarse con el
tickets ( TGS ). Si no puede encontrar ningún rastro de estos tipos de paquetes, debe
paso.
Marque estas opciones, haga clic Enabley luego aplique sus cambios.
Ahora necesitamos cambie algunos parámetros para activar la máxima verbosidad para la
Dupdo
debug=true
la truesiguiente manera:
Dupdo
-Dsun.security.krb5.debug=true
-DDebugSecurityAdjudicator=true
3. Después de esta reconfiguración, debe reiniciar los nodos del servidor WebLogic y
Nota
Esta configuración de depuración crea archivos de registro muy grandes; así que tenga
cuidado, el uso del espacio puede aumentar rápidamente.
Resumen
Nos hemos centrado en los pasos clave a seguir para activar el acceso de
seguridad en los recursos de su aplicación web de una manera rápida y fácil.
Índice
UN
Método abort () / Métodos del ciclo de vida: commit (), abort () y logout ()
Contexto de Active Directory
o Opción de bloqueo de usuario / bloqueo de usuario en un contexto de Active
Directory
Proveedor de Active Directory
o configuración / configuración específica del proveedor de Active Directory
archivo application.xml
o sobre / Split deploy y beabuild-maven-plugin
autenticación
o sobre / Autenticación bajo WebLogic
o LDAP externo, configurando / configurando un LDAP externo para
Autenticación / Autorización
Propiedad authentication.services.url / A simple SSO JSP
Proveedor de autenticación
o Acerca de / Proveedores de autenticación
o autenticación, bajo WebLogic / Autenticación bajo WebLogic
o JAAS / MBean y JAAS
o MBean / MBean y JAAS
o Proveedor de autenticación multiparte / Proveedor de autenticación
multiparte
o Autenticación Perimetral / Autenticación Perimetral
o configurar / configurar un nuevo proveedor
o inicializando / Inicializando el proveedor
o Implementación / Implementación del proveedor
o corriendo / ejecutando el proveedor
autorización
o LDAP externo, configurando / configurando un LDAP externo para
Autenticación / Autorización
segundo
Máquina virtual Java de 64 bits / Instalación del servidor WebLogic y el plugin Maven
de WebLogic
Etiqueta <build> / Reconfiguración de complementos estándar
opciones básicas, condición del rol de seguridad / Básico
BasicPassword / Credential Mapper
beabuild-maven-plugin
o sobre / Split deploy y beabuild-maven-plugin
do
Método de compromiso / Métodos de ciclo de vida: commit (), abort () y logout ()
archivo config.xml / Definición del MBean con un archivo MDF
configuración, proveedor de Active Directory
o sobre / configuración específica del proveedor de Active Directory
o parámetros de conexión / conexión
o parámetros de usuario / usuarios
o Grupos parámetros / Grupos
o parámetros de grupos estáticos / Grupos estáticos
o sección de parámetros generales / General
configurando
o Proveedor de autenticación / Configuración de un nuevo proveedor
o wls-maven-plugin, en EAR POM / Configurando wls-maven-plugin en EAR
POM
parámetros de conexión
o sobre / Conexión
Interfaz ConnectionSpec
o sobre / Credential Mapper
ContextHandler object / Context element
Parámetro de control de bandera
o sobre / Control Flag
archivo create-roles.py / Bean empaquetado en el módulo WAR
Credential Mapper
o sobre / Credential Mapper
Asignación de roles personalizados
o sobre / asignación de roles personalizados
re
Objeto DataSource
o sobre / los recursos de WebLogic
dependencias, proyecto Maven / Dependencias
DisplayName attribute / Definición del MBean con un archivo MDF
Nombre distinguido (DN) / Conexión
Dynamic Code Evolution VM (DCEVM) / Split deploy y beabuild-maven-plugin
mi
OREJA POM
o wls-maven-plugin, configurando / configurando wls-maven-plugin en el EAR
POM
EJB
o sobre / los recursos de WebLogic
o embalaje, en el módulo WAR / Bean empaquetado en el módulo WAR
Componente EJB
o about / Un componente EJB RESTful y seguro
Módulo EJB
o Asegurar / Asegurar el módulo EJB
Clase EJBResource
o sobre / los recursos de WebLogic
Recursos de Enterprise Information System (EIS) / WebLogic , Credential Mapper
Proyecto Enterprise Maven
o configurar / configurar un proyecto de Enterprise Maven
Método execute () / Credential Mapper
Lenguaje de marcado de control de acceso extensible (XACML)
o sobre / Seguridad programática con el proveedor WebLogic XACML
LDAP externo
o configurar, para autorización / Configurar un LDAP externo para
Autenticación / Autorización
o configurar, para autenticación / Configurar un LDAP externo para
Autenticación / Autorización
o problemas de solución de problemas / problemas de resolución de problemas
GRAMO
Método getDescription
o sobre / Implementación del proveedor
Método getIdentityAsserter
o sobre / Implementación del proveedor
grupo
o sobre / Usuarios y grupos
parámetros de grupo
o sobre / Grupos
Sección de grupos
o sobre / sección de grupos
H
Aplicación Hello Maven
o Lanzamiento / Lanzamiento de nuestra aplicación mundial Hello Maven y
WebLogic
Opción de caché de jerarquía
o sobre / opciones de rendimiento
HotSpot JVM / Instalación del servidor WebLogic y el plugin Maven de WebLogic
yo
Asertividad de identidad
o sobre / Asertividad de identidad , uso de aserción de identidad Kerberos SSO
en un dominio de Microsoft
o usar / usar la aserción de identidad
Identity Assertion SSO Kerberos
o usando, en Dominio de Microsoft / Usando Identity Assertion SSO Kerberos
en un dominio de Microsoft
Identity Assertion SSO Kerberos, utilizando en el dominio de Microsoft
o sobre / Uso de Identity Assertion SSO Kerberos en un dominio de Microsoft
o El cliente de Windows, en el dominio de Active Directory / cliente de Windows
debe estar en el dominio de Active Directory
o sesión de cliente, sesión de sesión de dominio de Active Directory / cliente de
Windows debe registrarse en el dominio de Active Directory
o Autenticación de Windows integrada / Autenticación de Windows integrada
o Configuración de entrada SPN / DNS URL y definición de SPN
o Configuración de entrada de URL DNS / configuración de entrada de
URL DNS y definición de SPN
o usuario técnico de Active Directory / usuario de Active Directory técnico
o Archivo de configuración krb5 / generación Keytab y el archivo de
configuración krb5
o generación de keytab / generación Keytab y el archivo de configuración krb5
o Creación de archivo JAAS / creación de archivo JAAS
o Configuración de argumentos de inicio WLS init / configuración de
argumentos de inicio WLS init
Método de inicialización / Inicialización del proveedor
instalando
o Servidor WebLogic / Instalación del Servidor WebLogic y el plugin Maven de
WebLogic
o Complemento WebLogic Maven / Instalación del servidor WebLogic y el
plugin Maven de WebLogic
J
JAAS
o y MBean / MBean y JAAS
o LoginModule / Custom JAAS LoginModule
Archivo JAAS
o creación / creación de archivo JAAS
JACC
o sobre / JACC
Embalaje JAR
o sobre / Creando el proyecto Maven
JASPIC
o y Java EE / JASPIC y Java EE
compilador javac
o sobre / Reconfigurar plugins estándar
Java EE
o conceptos de seguridad / concepto general de seguridad en Java EE
o y JASPIC / JASPIC y Java EE
Java EE 6
o sobre / JASPIC y Java EE
Solicitudes de especificación de Java (JSR)
o sobre / Resumen
JConsole
o sobre / Escribir proveedores personalizados - MBeans
JDBC
o sobre / Concepto general de seguridad en Java EE
Objeto JDBCResource
o sobre / los recursos de WebLogic
JMX
o sobre / Escribir proveedores personalizados - MBeans
JRebel
o sobre / Split deploy y beabuild-maven-plugin
JSP
o utilizado, para emular el sistema SSO / A simple SSO JSP
K
Boleto Kerberos
o sobre / Identificar: sujetos, directores y credenciales
Kerbtray
o about / La sesión del cliente de Windows debe registrarse en el dominio de
Active Directory
Klist
o about / La sesión del cliente de Windows debe registrarse en el dominio de
Active Directory
Archivo krb5Login.conf / Problemas de depuración
L
Protocolo ligero de acceso a directorios (LDAP)
o sobre / Identificar: sujetos, directores y credenciales
servidor LDAP local
o configurar / Configuración del servidor LDAP local: usuario / roles / lockout
Elemento localRepository / Instalación del servidor WebLogic y el plugin Maven de
WebLogic
método de inicio de sesión () / Identificación: sujetos, principales y
credenciales , métodos del ciclo de vida: commit (), abort () y logout ()
o sobre / El método de inicio de sesión ()
Clase LoginContext
o sobre / Identificar: sujetos, directores y credenciales
LoginModule
o sobre / Identificar - Sujetos, Principales y Credenciales , Agregar WebLogic
MBeanMaker al POM , Custom Login JAASModule
o code / Custom Login JAASModule
o método login () / El método login ()
o método de cierre de sesión / Métodos del ciclo de vida - commit (), abort () y
logout ()
o método de aborto / métodos del ciclo de vida - commit (), abort () y logout ()
o Método de compromiso / Métodos de ciclo de vida: commit (), abort () y
logout ()
o métodos del ciclo de vida / métodos del ciclo de vida - commit (), abort () y
logout ()
Interfaz LoginModule
o sobre / Autenticación bajo WebLogic
Método logout () / Métodos del ciclo de vida: commit (), abort () y logout ()
METRO
mave-antrun-plugin / Agregar WebLogic MBeanMaker al POM
Maven
o URL / Configuración de un proyecto de Enterprise Maven
o complementos, reconfiguración / Reconfiguración de complementos estándar
maven-antrun-plugin
o sobre / El proyecto Maven
maven-archetype-plugin
o utilizado, para crear módulos / Crear los módulos con maven-archetype-
plugin
maven-install-plugin
o sobre / El proyecto Maven
plugin maven-install-plugin
o sobre / Reconfigurar plugins estándar
maven-jar-plugin
o sobre / El proyecto Maven , reconfiguración de plugins estándar
maven-resources-plugin / Agregar WebLogic MBeanMaker al POM
Complementos Maven
o reconfigurando / reconfigurando plugins estándar
Proyecto Maven
o sobre / El proyecto Maven
o creando / creando el proyecto Maven
o dependencias / Dependencias
MBean
o sobre / MBean y JAAS
o y JAAS / MBean y JAAS
o definir, con archivo MDF / Definir el MBean con un archivo MDF
Archivo de definición MBean (MDF)
o sobre / Escribir proveedores personalizados - MBeans
Clase MBeanImplBeanInfo / Definición del MBean con un archivo MDF
Implementación MBean
o escribir / escribir la implementación de MBean
o proveedor de autenticación, inicializando / inicializando el proveedor
o proveedor de autenticación, implementación / implementación del proveedor
Herramienta MBeanMaker
o sobre / Escribir proveedores personalizados - MBeans , MBean y JAAS , el
proyecto Maven
MBeans
o sobre / Escribir proveedores personalizados - MBeans
Interfaz MBeanServer
o sobre / Escribir proveedores personalizados - MBeans
MBean tipo
o sobre / El proyecto Maven
Archivo MDF
o MBean, definiendo con / definiendo el MBean con un archivo MDF
Dominio de Microsoft
o Identity Assertion SSO Kerberos, usando en / Usando Identity Assertion SSO
Kerberos en un dominio de Microsoft
módulos
o creando, con maven-archetype-plugin / Creando los módulos con maven-
archetype-plugin
Proveedor de autenticación multiparte
o sobre / Proveedor de autenticación multiparte
Interfaz MXBean
o sobre / Escribir proveedores personalizados - MBeans
Clase MyProtectedServlet / Bean empaquetado en el módulo WAR
PAG
Clase PacktAuthProviderImpl / Escribiendo la implementación de MBean
Clase PacktLoginModuleImpl / Implementación del proveedor
PasswordCredential interface / Credential Mapper
Opciones de desempeño
o sobre / opciones de rendimiento
Autenticación Perimetral
o sobre / Autenticación Perimetral
POM
o WebLogic MBeanMaker, agregando / agregando WebLogic MBeanMaker al
POM
Archivo pom.xml / Configuración de wls-maven-plugin en EAR POM
Opción de caché de validador principal / Caché de validador principal
seguridad programática
o sobre / Seguridad programática
o con WebLogic XACML Provider / Seguridad programática con el proveedor
WebLogic XACML
Modelo de objetos del proyecto (POM)
o about / Creando los módulos con maven-archetype-plugin
Atributo ProviderClassName / Definición del MBean con un archivo MDF
Opción Purgar tickets / La sesión del cliente de Windows debe registrarse en el
dominio de Active Directory
R
reconfigurando
o Plugins Maven / Reconfiguración de plugins estándar
recursos, recursos de WebLogic / WebLogic
Anotación RunAs
o utilizado, para modificar la identidad de seguridad / cambiar la identidad de
seguridad con RunAs
o sobre / Cambiar la identidad de seguridad con RunAs
S
Anotación @ServletSecurity
o sobre / Concepto general de seguridad en Java EE
conceptos de seguridad, Java EE / concepto general de seguridad en Java EE
Interfaz de SecurityContext
o sobre / Credential Mapper
identidad de seguridad
o modificación, anotación RunAs utilizada / Cambio de identidad de seguridad
con RunAs
condición de rol de seguridad
o sobre / condición de rol de seguridad
o opciones básicas / Básico
o basado en fecha y hora / basado en fecha y hora
o elemento de contexto / elemento de contexto
o Opción de bloqueo de usuario / bloqueo de usuario
o usuarios, desbloqueando / desbloqueando usuario
Nombres de servicios principales (SPN) / configuración de entrada de DNS DNS y
definición de SPN
Archivo settings.xml / Instalar el servidor WebLogic y el plugin Maven de WebLogic
método de apagado / inicialización del proveedor
Inicio de sesión único (SSO)
o sobre / Configuración de un LDAP externo para Autenticación / Autorización
SPNEGO
o sobre / Uso de Identity Assertion SSO Kerberos en un dominio de Microsoft
SPNEGO Identity Assertion
o configuración / configuración del asertador de identidad SPNEGO
o problemas de configuración, problemas de depuración / depuración
Sistema SSO
o emulando, JSP utilizó / A SSO simple JSP
mapeo DD estándar
o sobre / asignación estándar de DD
parámetros de grupos estáticos
o sobre / Grupos estáticos
objeto estructurado
o sobre / los recursos de WebLogic
Objeto Sujeto / Identificación - Sujetos, Principales y Credenciales
T
Servidor de otorgamiento de boletos (TGS)
o sobre / problemas de depuración
U
usuario
o sobre / Usuarios y grupos
o desbloqueo / desbloqueo del usuario
Opción de bloqueo de usuario / bloqueo de usuario
o en contexto de Active Directory / bloqueo de usuario en un contexto de Active
Directory
parámetros de usuario
o sobre / Usuarios
Sección de usuarios
o sobre / sección de usuarios
UTF-8
o sobre / Reconfigurar plugins estándar
V
VisualVM
o sobre / Escribir proveedores personalizados - MBeans
W
Módulo WAR
o EJB, empaque en / Bean empaquetado en el módulo WAR
WebLogic
o arquitectura de seguridad / arquitectura de
seguridad WebLogic , identificación: temas, directores y credenciales
o recursos / recursos de WebLogic
archivo weblogic-ejb-jar.xml
o Asegurar / Asegurar el módulo EJB
paquete weblogic.security. *
o sobre / arquitectura de seguridad WebLogic
Plugin Maven de WebLogic
o instalar / instalar el servidor WebLogic y el plugin Maven de WebLogic
WebLogic MBeanMaker
o añadiendo, a POM / Añadiendo WebLogic MBeanMaker al POM
WebLogic Scripting Tool (WLST)
o sobre / Configuración de un LDAP externo para Autenticación / Autorización
Seguridad WebLogic
o servidor LDAP local, configurando / Configuración del servidor LDAP local:
usuario / roles / lockout
Arquitectura de seguridad de WebLogic
o sobre / Arquitectura de seguridad WebLogic , Identificando - Sujetos,
Principales y Credenciales
Weblogic Security Framework (WSF)
o sobre / arquitectura de seguridad WebLogic
Servidor WebLogic
o instalar / instalar el servidor WebLogic y el plugin Maven de WebLogic
o Argumentos de inicio, configurando / Configuración de argumentos de inicio
WLS init
Aplicación mundial WebLogic
o Lanzamiento / Lanzamiento de nuestra aplicación mundial Hello Maven y
WebLogic
Módulo web
o Asegurar / Asegurar el módulo web
Módulo web, asegurando
o sobre / Asegurar el módulo web
o mapeo estándar de DD / mapeo estándar de DD
o asignación personalizada de roles / asignación de roles personalizados
o seguridad programática / seguridad programática
o seguridad programática, con WebLogic XACML Provider / seguridad
programática con el proveedor WebLogic XACML
wls-maven-plugin
o configurando, en EAR POM / Configurando wls-maven-plugin en EAR POM