Estoy trabajando en la aplicación Java . El front-end sería Angular2 .
Si trato de abrir la página de inicio de mi aplicación ( index.html está configurado en web.xml como página predeterminada ). La URL de acceso debe ser http://localhost:8080/MyWebApp .
Luego tomé la página de inicio de sesión de una organización estándar para la autenticación. Si la autenticación tiene éxito, el token de autorización HTTP se establecerá en el encabezado de la solicitud y, finalmente, el control mostrará la página de inicio de mi aplicación.
Si uso jsp , puedo obtener un encabezado de solicitud como,
String authHeader = request.getHeader("authorization"); out.println("<h2>HTTP Authorization header:</h2>"); if (authHeader == null) { out.print("No authorization header"); } else { out.print("<textarea readonly id='authHeader' rows=\"5\" cols=\"80\">" + authHeader + "</textarea>"); }Pero estamos usando html como front-end, debido a angular 2 .
Entonces, para mi escenario, ¿cómo puedo obtener el encabezado y el token de la solicitud?
Por favor, no dude en editar mi pregunta, si no está clara.
No puede obtener un valor de un encabezado de JavaScript del lado del cliente . Las únicas excepciones son los encabezados User-Agent y Referrer, porque el navegador proporciona los valores en los objetos del document y del navigator .
Dijo que está trabajando en una aplicación Java con un front-end Angular 2 y alguna otra aplicación proporciona un token (podría ser útil para especificar si esto es algo estándar, por ejemplo, OAuth2). Asumiré que es un token personalizado. Creo que también quiso decir que tiene algún componente del lado del servidor, un servlet.
Lo que puede hacer es implementar la autenticación usando los servlets (o incluso los JSP) y luego redirigir de nuevo a la aplicación front-end de Angular 2, pasando el token en la URL como un parámetro de consulta. La URL es fácil de leer en Angular 2 . Sin embargo, esto no es muy seguro, incluso si usa algo como JWT . Como alternativa a la URL, puede usar el encabezado Set-Cookie y luego leer la cookie de Angular.
Lo que sería casi seguro sería autenticar al usuario utilizando el lado del servidor (servlet o incluso JSP). Luego, cree un token único que se pasa en la URL como un parámetro de consulta al redirigir a su página HTML. Luego, use el token único en una llamada al servidor nuevamente para recuperar el token de autenticación real mediante una llamada REST adecuada de Angular 2 con solicitud y respuesta.
Depende de cuánto control tenga y qué tipo de autenticación use la aplicación de autenticación, es posible que desee echar un vistazo a OAuth2. Se ocupa de muchos escenarios de autenticación diferentes. Específicamente, el flujo de concesión implícito de OAuth2 se usa para autenticar a los usuarios solo desde aplicaciones del lado del cliente. Incluso si no puedes usar eso, te dará algunas ideas.
Cuando está utilizando una autorización del lado del servidor, su servidor coloca encabezados con autorización en sus páginas HTML. Pero también puede poner estos tokens en la respuesta de su página mediante metaetiquetas en el lado del servidor. Y luego acceda a las metaetiquetas por js.
<meta name="_csrf" content="${_csrf.token}"/> <meta name="_csrf_header" content="${_csrf.headerName}"/>Las metaetiquetas son similares a los encabezados de respuesta y pueden completar o anular los encabezados de respuesta. Lea esta publicación, por favor , el token CSRF de Spring Security no funciona con la llamada AJAX y el envío de formularios en el mismo JSP
Puede manejar esto en el lado del servidor (las expresiones de JSP funcionan en el lado del servidor), crear un método de controlador en el servidor donde puede verificar el encabezado y luego redirigir a su aplicación Angular.