unchallenged restful example auth java servlets jms basic-authentication

java - restful - Cómo obtener contraseña de autenticación básica HTTP



proxy auth state unchallenged (2)

El nombre de usuario y la contraseña se enviaron originalmente en el encabezado de Authorization HTTP (codificado en base64) para que pueda usar eso; pero si el usuario mantiene una sesión utilizando cookies, no necesariamente enviará ese encabezado cada vez.

Estoy usando la autenticación HTTP básica con Java.

Mi Servlet envía un mensaje JMS, pero debo proporcionar el usuario y la contraseña para autenticarme al crear la conexión:

javax.jms.ConnectionFactory.createConnection(String username, String password)

Puedo recuperar el nombre de usuario de HttpServletRequest.getUserPrincipal (). Pero parece que no hay manera de recuperar la contraseña. ¿Cómo puedo solucionar esto?


La contraseña a la que se refiere es muy probablemente diferente de la proporcionada por los usuarios al iniciar sesión. Si bien el caso de uso no está claro en la pregunta, pero parece que está intentando usar el nombre de usuario / contraseña provisto por usuarios externos para crear una conexión a JMS Connection Factory. Esto no me suena arquitectónicamente seguro. Debe usar solo una credencial para conectarse a ConnectionFactory, que debe estar protegida (trátela como conexiones de base de datos). Lo mejor es usar JNDI para buscar ConnectionFactory y omitir el nombre de usuario / contraseña de administración.

Sin embargo, en caso de que tenga que usar la técnica, puede usar el siguiente bloque de código. Lo estoy copiando del proyecto Gitblit tal como estaba abierto en mi eclipse

Usando la clase Java8 Base64:

final String authorization = httpRequest.getHeader("Authorization"); if (authorization != null && authorization.toLowerCase().startsWith("basic")) { // Authorization: Basic base64credentials String base64Credentials = authorization.substring("Basic".length()).trim(); byte[] credDecoded = Base64.getDecoder().decode(base64Credentials); String credentials = new String(credDecoded, StandardCharsets.UTF_8); // credentials = username:password final String[] values = credentials.split(":", 2); }