Desarrollo de la interfaz UserRegistry para utilizar registros personalizados
La implementación de esta interfaz permite que la seguridad de WebSphere Application Server utilice registros personalizados. Esta posibilidad amplía el archivo java.rmi. Con un registro remoto, puede completar este proceso de forma remota.
Acerca de esta tarea
Proporcione implementaciones de los métodos siguientes.
Procedimiento
- Inicialice el método UserRegistry, con initialize(java.util.Properties).
Se llama a este método para inicializar el método UserRegistry. Todas las propiedades que se definan en el panel del registro de usuarios personalizado se propagarán a este método.public void initialize(java.util.Properties props) throws CustomRegistryException, RemoteException;
Para el archivo de ejemplo FileRegistrySample.java, el método de inicialización recupera los nombres de los archivos del registro que contienen la información de usuarios y de grupos.
Se llama a este método durante el arranque del servidor para inicializar el registro. También se llama a este método cuando se efectúa la validación mediante la consola administrativa, cuando la seguridad está activada. Este método continúa igual que en la Versión 4.x.
- Autentique usuarios con checkPassword(String,String).
Se llama al método checkPassword para autenticar usuarios cuando inician la sesión utilizando un nombre o ID de usuario y una contraseña. Este método devuelve una serie que, en la mayoría de los casos, es el nombre de seguridad del usuario. Se creará una credencial para este usuario para fines de autorización. Este nombre de usuario también se devuelve en la llamada de enterprise bean, getCallerPrincipal y el servlet llama a los métodos getUserPrincipal y getRemoteUser. Consulte el método getUserDisplayName para obtener más información si tiene nombres de visualización en el registro. En algunas situaciones, si devuelve un usuario distinto al que ha iniciado la sesión, compruebe que el usuario sea válido en el registro.public String checkPassword(String userSecurityName, String password) throws PasswordCheckFailedException CustomRegistryException, RemoteException;
Para el archivo de ejemplo FileRegistrySample.java, el método mapCertificate obtiene el nombre distinguido (DN) de la cadena de certificados y se asegura de que se trate de un usuario válido del registro antes de devolver el usuario. En el ejemplo, el método checkPassword comprueba la combinación de nombre y contraseña en el registro de usuarios y, si coinciden, devuelve el usuario que se está autenticando.
Se invoca este método en diferentes escenarios, por ejemplo, mediante la consola administrativa para validar la información de usuario después de que se inicialice el registro de usuarios. También se invoca cuando se accede a los recursos protegidos del producto para autenticar al usuario y antes de continuar con la autorización. Este método es el mismo que en la Versión 4.x.
- Obtenga nombres de usuario de certificados X.509 con mapCertificate(X509Certificate[]).
Se llama al método mapCertificate para obtener un nombre de usuario de una cadena de certificados X.509 proporcionada por el navegador. La cadena de certificados completos se pasará a este método y la implementación puede validar la cadena si es necesario y obtener la información del usuario. A continuación, se creará una credencial para este usuario para fines de autorización. Si en su configuración no se da soporte a los certificados de navegador, puede generar la excepción CertificateMapNotSupportedException. Si no se da soporte a los certificados, la autenticación no se ejecuta correctamente si el tipo de desafío son los certificados, incluso si en el navegador hay certificados válidos.public String mapCertificate(X509Certificate[] cert) throws CertificateMapNotSupportedException, CertificateMapFailedException, CustomRegistryException, RemoteException;
Se llama a este método cuando se proporcionan certificados para autenticación. En las aplicaciones web, se llama a este método cuando se establecen las restricciones de autenticación en CLIENT-CERT del archivo web.xml de la aplicación para correlacionar un certificado con un usuario válido del registro. En los clientes Java™, se llama a este método para correlacionar certificados de cliente en la capa de transporte cuando se utiliza la autenticación de la capa de transporte. Asimismo, cuando se establece la señal de aserción de identidad, mediante el protocolo de autenticación SIv2, para que contenga certificados, se llama a este método para correlacionar los certificados con un usuario válido.
En WebSphere Application Server Versión 4.x, el parámetro de entrada es el certificado X509Certificate. En WebSphere Application Server Versión 5.x y posteriores, este parámetro cambia para aceptar una matriz de certificados X509Certificate (por ejemplo, una cadena de certificados). En la versión 4.x, sólo se llama a este parámetro para las aplicaciones web, pero en la versión 5.x y posteriores puede llamar a este método tanto para los clientes web como Java.
- Obtenga el nombre de dominio de seguridad con getRealm.
Se llama al método getRealm para obtener el nombre del ámbito de seguridad. El nombre del ámbito identifica el dominio de seguridad para el que el registro autentica usuarios. Si este método devuelve un valor nulo, se utiliza el nombre por omisión de customRealm.public String getRealm() throws CustomRegistryException, RemoteException;
Para el archivo de ejemplo FileRegistrySample.java, el método getRealm devuelve la serie customRealm. Una de las llamadas a este método se realiza cuando se valida la información del registro. Este método es el mismo que en la Versión 4.x.
- Obtenga la lista de usuarios del registro con getUsers(String,int).
El método getUsers devuelve la lista de usuarios del registro. Los nombres de los usuarios dependen del parámetro de patrón. El número de usuarios está limitado por el parámetro de límite. En un registro con muchos usuarios, no resulta práctico obtener todos los usuarios. Por lo tanto, se ha introducido el parámetro de límite (limit) para limitar el número de usuarios que se recuperan del registro. Si el valor del límite es cero (0) significa que se han de devolver todos los usuarios que coinciden con el patrón y esto puede ocasionar problemas en los registros grandes. Utilice este límite con atención.public Result getUsers(String pattern, int limit) throws CustomRegistryException, RemoteException;
Se espera que las implementaciones del registro personalizado den soporte como mínimo a la búsqueda comodines (*). Por ejemplo, un patrón de asterisco (*) debe devolver todos los usuarios y un patrón de (b*) debe devolver los usuarios que comienzan por b.
El parámetro de retorno es un objeto con un tipo com.ibm.websphere.security.Result. Este objeto contiene dos atributos, un atributo java.util.List y un atributo java.lang.boolean. La lista contiene los usuarios devueltos y el distintivo booleano indica si hay más usuarios disponibles en el registro para el patrón de búsqueda. Este distintivo booleano se utilizará posteriormente para indicar si hay más usuarios disponibles en el registro.
En el archivo de ejemplo FileRegistrySample.java, el método getUsers recupera el número necesario de usuarios del registro de usuarios y los establece como una lista en el objeto Result. Para averiguar si hay más grupos que los solicitados, el ejemplo obtiene un usuario más del número solicitado y si encuentra el usuario adicional establece el distintivo booleano en true. Para la coincidencia de patrones, se utiliza el método de coincidencia de la clase RegExpSample que da soporte a caracteres comodín como, por ejemplo, el asterisco (*) y el signo de interrogación (?).
Este método se invoca mediante la consola administrativa para añadir grupos a los roles en los diferentes paneles de correlación de grupos con roles. La consola administrativa utilizará el conjunto de valores booleanos del objeto Result para indicar que hay más entradas que coinciden con el patrón disponibles en el registro de usuarios.
En WebSphere Application Server Versión 4.x, este método especifica que sólo se acepte el parámetro de patrón. La devolución es una lista. En WebSphere Application Server Versión 5.x o posteriores, este método se ha modificado para que acepte un parámetro adicional, el límite. Idealmente, la implementación debe modificarse para aceptar el valor de límite y limitar el número de usuarios devuelto. La devolución se ha modificado para que devuelva un objeto Result, que consta de la lista y de un distintivo que indica si hay más entradas. Cuando se devuelva la lista, utilice el método Result.setList(List) para establecer la lista en el objeto Result. Si hay más entradas de las solicitadas para el parámetro limit, establezca el atributo booleano en true en el objeto de resultado, utilizando el método Result.setHasMore. El valor predeterminado para el atributo booleano del objeto de resultado es false.
- Obtenga el nombre de visualización de un usuario con getUserDisplayName(String).
El método getUserDisplayName devuelve un nombre de visualización para un usuario, si existe uno. El nombre de visualización es una serie opcional que describe el usuario que se puede establecer en algunos registros. Se trata de un nombre descriptivo del usuario y no tiene que ser exclusivo en el registro.public String getUserDisplayName(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Por ejemplo, en los sistemas IBM® i, puede visualizar la descripción de texto del perfil de usuario.
Por ejemplo, en los sistemas Windows puede visualizar el nombre completo del usuario.
Si no necesita tener nombres de visualización en el registro, devuelva nulo o una serie vacía para este método.
Si en WebSphere Application Server Versión 4.x existían nombres de visualización para cualquier usuario, estos nombres eran útiles para la llamada al método EJB (Enterprise JavaBeans) getCallerPrincipal y las llamadas de servlet getUserPrincipal y getRemoteUser. Si los nombres de visualización no son los mismos que el nombre de seguridad de cualquier usuario, se devuelven los nombres de visualización para los métodos de enterprise bean y servlet mencionados anteriormente. La devolución de los nombres de visualización para estos métodos puede ser un problema en algunas situaciones ya que es posible que los nombres de visualización no sean exclusivos del registro de usuarios. Para evitar este problema, modifique el comportamiento por omisión de modo que devuelva el nombre de seguridad del usuario en lugar del nombre de visualización del usuario. Para obtener más información sobre cómo establecer las propiedades del registro personalizado, consulte el apartado sobre Cómo establecer propiedades para el registro personalizado.
En el archivo de ejemplo FileRegistrySample.java, este método devuelve el nombre de visualización del usuario cuyo nombre coincide con el nombre de usuario proporcionado. Si el nombre de visualización no existe, el método devuelve una serie vacía.
Se puede llamar a este método para presentar los nombres de visualización en la consola administrativa, o con la línea de mandatos y la herramienta wsadmin. Utilice este método solamente para fines de visualización. Este método es el mismo que en la Versión 4.x.
- Obtenga el ID exclusivo de un usuario con getUniqueUserId(String).
Este método devuelve el ID exclusivo del usuario a partir del nombre de seguridad.public String getUniqueUserId(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve el valor del uniqueUserId del usuario cuyo nombre coincide con el nombre proporcionado. Se llama a este método cuando se forma una credencial para un usuario y también cuando se crea la tabla de autorizaciones para la aplicación.
- Obtenga el nombre de seguridad de un usuario con getUserSecurityName(String).
Este método devuelve el nombre de seguridad de un usuario a partir del ID exclusivo. En el archivo de ejemplo FileRegistrySample.java, este método devuelve el nombre de seguridad del usuario cuyo ID exclusivo coincide con el ID proporcionado.public String getUserSecurityName(String uniqueUserId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Este método se llama para asegurarse de que exista un usuario válido para un uniqueUserId determinado. Este método se llama para obtener el nombre de seguridad del usuario cuando se obtiene el uniqueUserId a partir de una señal.
- Compruebe si un usuario determinado es un usuario válido del registro con
isValidUser(String).
Este método indica si este usuario concreto es un usuario válido del registro.public boolean isValidUser(String userSecurityName) throws CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve true si se encuentra el usuario en el registro, de lo contrario, este método devuelve false. Se llama principalmente a este método en las situaciones en que saber si el usuario existe en el directorio evitará problemas en el futuro. Por ejemplo, en la llamada mapCertificate cuando se obtiene el nombre del certificado y el usuario resulta no ser un usuario válido del registro de usuarios, no tendrá que intentar crear la credencial para el usuario.
- Devuelva la lista de grupos del registro de usuarios con getGroups(String,int).
El método getGroups devuelve la lista de grupos del registro de usuarios. Los nombres de los grupos dependen del parámetro de patrón. El número de grupos está limitado por el parámetro de límite. En un registro con muchos grupos, no resulta práctico obtener todos los grupos. Por lo tanto, se ha introducido el parámetro de límite para limitar el número de grupos que se recuperan del registro de usuarios. Si el valor del límite es cero (0) significa que se han de devolver todos los grupos que coinciden con el patrón y esto puede ocasionar problemas en los registros de usuarios grandes. Utilice este límite con atención. Se espera que las implementaciones del registro personalizado den soporte como mínimo a la búsqueda comodines (*). Por ejemplo, un patrón de asterisco (*) debe devolver todos los usuarios y un patrón de (b*) debe devolver los usuarios que comienzan por b.public Result getGroups(String pattern, int limit) throws CustomRegistryException, RemoteException;
El parámetro de retorno es un objeto con un tipo com.ibm.websphere.security.Result. Este objeto contiene los atributos java.util.List y java.lang.boolean. La lista contiene los grupos devueltos y el distintivo booleano indica si hay más grupos disponibles en el registro de usuarios para el patrón de búsqueda. Este distintivo booleano se utilizará posteriormente para indicar si hay más grupos disponibles en el registro.
En el archivo de ejemplo FileRegistrySample.java, el método getUsers recupera el número necesario de grupos del registro de usuarios y los establece como una lista en el objeto Result. Para averiguar si hay más grupos que los solicitados, el ejemplo obtiene un usuario más del número solicitado y si encuentra el usuario adicional establece el distintivo booleano en true. Para la coincidencia de patrones, se utiliza el método de coincidencia de la clase RegExpSample que da soporte al asterisco (*) y al signo de interrogación (?).
Este método se invoca mediante la consola administrativa para añadir grupos a los roles en los diferentes paneles de correlación de grupos con roles. La consola administrativa utilizará el conjunto de valores booleanos del objeto Result para indicar que hay más entradas que coinciden con el patrón disponibles en el registro de usuarios.
En WebSphere Application Server Versión 4, este método sólo se utiliza para aceptar el parámetro de patrón y devolver una lista. En WebSphere Application Server Versión 5.x o posteriores, este método se ha modificado para que acepte el parámetro de límite. Cambie la implementación para aceptar el valor de límite y limitar el número de usuarios devueltos. La devolución se ha modificado para que devuelva un objeto Result, que consta de la lista y de un distintivo que indica si hay más entradas. Utilice Result.setList(List) para establecer la lista en el objeto de Result. Si hay más entradas de las solicitadas para el parámetro limit, establezca el atributo booleano en true en el objeto Result, utilizando el método Result.setHasMore. El valor por omisión para el atributo booleano del objeto de resultado es false.
- Obtenga el nombre de visualización de un grupo con getGroupDisplayName(String).
El método getGroupDisplayName devuelve un nombre de visualización para un grupo si existe uno. El nombre de visualización es una serie opcional que describe el usuario que se puede establecer en algunos registros de usuarios. Se trata de un nombre descriptivo del grupo y no tiene que ser exclusivo en el registro. Si no necesita tener nombres de visualización en el registro, devuelva nulo o una serie vacía para este método.public String getGroupDisplayName(String groupSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve el nombre de grupo del grupo cuyo nombre coincide con el nombre de grupo proporcionado. Si el nombre de visualización no existe, el método devuelve una serie vacía.
El producto puede llamar a este método para presentar los nombres de visualización en la consola administrativa o en la línea de mandatos si se utiliza la herramienta wsadmin. Este método sólo se utiliza para fines de visualización.
- Obtenga el ID exclusivo de un grupo con getUniqueGroupId(String).
Este método devuelve el ID exclusivo del grupo que proporciona el nombre de seguridad.public String getUniqueGroupId(String groupSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve el nombre de seguridad del grupo cuyo ID exclusivo coincide con el ID proporcionado. Este método verifica que exista un grupo válido para un ID de uniqueGroupId determinado.
- Obtenga los ID exclusivos de todos los grupos a los que pertenece un usuario con
getUniqueGroupIds(String).
Este método devuelve los ID exclusivos de todos los grupos a los que pertenece un usuario.public List getUniqueGroupIds(String uniqueUserId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve el ID exclusivo de todos los grupos que contengan este uniqueUserID. Se llama a este método cuando se crea la credencial para el usuario. Como parte de la creación de la credencial, todos los ID de groupUniqueId a los que pertenece el usuario se recopilan y se colocan en la credencial para fines de autorización cuando a los grupos se les concede acceso a un recurso.
- Obtenga el nombre de seguridad de un grupo con getGroupSecurityName(String).
Este método devuelve el nombre de seguridad de un grupo a partir del ID exclusivo.public String getGroupSecurityName(String uniqueGroupId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve el nombre de seguridad del grupo cuyo ID exclusivo coincide con el ID proporcionado. Este método verifica que exista un grupo válido para un ID de uniqueGroupId determinado.
- Determine si un grupo es un grupo válido del registro con
isValidGroup(String).
Este método indica si el grupo determinado es un grupo válido del registro.public boolean isValidGroup(String groupSecurityName) throws CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve true si se encuentra el grupo en el registro, de lo contrario, este método devuelve false. Este método se puede utilizar en las situaciones en las que saber si el grupo existe en el directorio evitará problemas en el futuro.
- Obtenga todos los grupos a los que pertenece un usuario con getGroupsForUser(String).
Este método devuelve todos los grupos a los que pertenece un usuario cuyo nombre coincide con el nombre proporcionado. Este método es similar al getUniqueGroupIds con la excepción de que se utilizan nombres de seguridad en lugar de los ID exclusivos.public List getGroupsForUser(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
En el archivo de ejemplo FileRegistrySample.java, este método devuelve todos los nombres de seguridad del grupo que contienen el nombre de userSecurityName.
Este método se llama mediante la consola administrativa o la herramienta de script para comprobar que los usuarios especificados para roles RunAs ya forman parte de este rol en la correlación de usuarios y grupos con roles. Esta comprobación es necesaria para asegurarse de que un usuario no puede añadirse a un rol RunAs a menos que se asigne dicho usuario al rol en la correlación de usuarios y grupos con roles, ya sea de forma directa o indirecta (mediante un grupo que contiene este usuario). Dado que un grupo al que pertenece el usuario puede formar parte del rol en la correlación de usuarios y grupos con roles, se llama a este método para comprobar si alguno de los grupos a los que pertenece este usuario se correlaciona con dicho rol.
- Recupere usuarios de un grupo especificado con getUsersForGroup(String,int).
Este método recupera los usuarios del grupo especificado. El número de usuarios que se devuelven está limitado por el parámetro de límite. Si el valor del límite es cero (0) significa que se han de devolver todos los usuarios de dicho grupo. El componente de seguridad de WebSphere Application Server no llama directamente a este método. No obstante, otros componentes pueden llamar a este método. En raras situaciones, si trabaja con un registro donde obtener todos los usuarios de cualquiera de los grupos no resulta práctico, puede generar la excepción NotImplementedException para los grupos determinados. En este caso, compruebe que si Process Choreographer está instalado, no se han utilizado estos grupos concretos como modelo para las asignaciones de personal. Si no importa si se devolverán o no los usuarios de los grupos del registro de usuarios, le recomendamos que no cree la excepción NotImplemented cuando implemente este método.public Result getUsersForGroup(String groupSecurityName, int limit) throws NotImplementedException, EntryNotFoundException, CustomRegistryException, RemoteException;
El parámetro de retorno es un objeto con un tipo com.ibm.websphere.security.Result. Este objeto contiene los atributos java.util.List y java.lang.boolean. La lista contiene los usuarios devueltos y el distintivo booleano indica si hay más usuarios disponibles en el registro de usuarios para el patrón de búsqueda. Este distintivo booleano indica al cliente si hay usuarios disponibles en el registro de usuarios.
En el ejemplo, este método devuelve un usuario más que el número de usuarios solicitado para un grupo si el parámetro de límite no se establece en cero (0). Si se ejecuta correctamente y obtiene un usuario más, establece el distintivo booleano en true.
En WebSphere Application Server Versión 4, este método getUsers es obligatorio para el producto. En WebSphere Application Server Versión 5.x o posteriores, este método puede generar la excepción NotImplementedException en situaciones donde no sea práctico obtener el conjunto de usuarios solicitado. No obstante, esta excepción se generará en pocas situaciones, porque puede afectar a otros componentes. En la versión 4, este método sólo aceptaba el parámetro de patrón y devolvía una lista. En la versión 5, este método acepta el parámetro de límite. Cambie la implementación para aceptar el valor de límite y limitar el número de usuarios devueltos. La devolución se modifica de modo que devuelve un objeto Result, que consta de la lista y de un distintivo que indica si hay más entradas. Cuando se devuelva la lista, utilice el método Result.setList(List) para establecer la lista en el objeto Result. Si hay más entradas de las solicitadas para el parámetro limit, establezca el atributo booleano en true en el objeto Result, utilizando el método Result.setHasMore. El valor por omisión para el atributo booleano del objeto de resultado es false.
- Implemente el método createCredential(String). Atención: Las dos primeras líneas del siguiente ejemplo de código se han dividido para fines ilustrativos.
En este release de WebSphere Application Server no se llama al método createCredential. Puede devolver null. En el ejemplo, se devuelve un valor null.public com.ibm.websphere.security.cred.WSCredential createCredential(String userSecurityName) throws NotImplementedException, EntryNotFoundException, CustomRegistryException, RemoteException;
Qué hacer a continuación


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_users
File name: tsec_users.html