Nuestro cliente desea que utilicemos ADFS 2012 R2 (también conocido como 3.0) como el medio principal para dos características de seguridad en las aplicaciones internas que estamos creando:
- La aplicación web (hay dos .NET y amp; Angular) y una aplicación para iOS utilizará el flujo OAUTH dentro de ADFS
- Al finalizar el flujo del token, el JWT creado por ADFS se pasará a una API RESTful que se está creando con Spring
- La API de Spring tendrá que validar el JWT antes de permitir que la llamada continúe
El uso de ADFS para el flujo de OAUTH es nuevo para nosotros y han surgido algunas preguntas. Hemos rastreado los Internet buscando respuestas. Muchos de ellos están centrados individualmente en ofrecer una solución utilizando tecnología solo para MS (ADAL, API basada en .NET / C #, OWIN, Katana). Por lo tanto, esperábamos obtener una respuesta mediante SE. Cualquier y toda ayuda es muy apreciada.
En este punto, hemos podido:
- Registre un cliente OAUTH con el comando de PowerShell en ADFS
- Registre un recurso "falso" como una parte que confía en ADFS
- Configure a nuestros clientes para hacer una llamada a ADFS para autorizar y luego obtener el JWT devuelto
Este enlace fue muy útil para explicar la configuración:
Ahora, necesitamos colocar el código en la API de Spring para verificar el JWT.
En todos los ejemplos de flujo OAUTH, hay un secreto compartido entre la parte emisora y el cliente. Este secreto se utiliza para verificar que el JWT no se haya falsificado.
En la configuración que hemos hecho hasta ahora en ADFS, no hay una definición de una clave secreta o un secreto compartido. Podemos tomar el JWT del encabezado de autorización y decodificarlo. Pero parece que no tenemos medios para verificar la firma.
La pregunta es ¿cómo validamos el JWT dentro de la API de Spring (que se pasa del cliente a través del encabezado) que regresa de ADFS sin tener el "secreto" que se usó para construir la firma?
Nuestras opciones si no conseguimos que esto funcione son:
- Utilice Oracle Identity Manager / Access Manager (ya interno)
- Incorpore WSO2 Identity Manager a la imagen