Habilitar Autenticación Servidor a Servidor en aplicaciones de AAD
A veces, cuando estamos creando una aplicación, es sólo para que se use desde uno o unos pocos puntos, generalmente servidores que usan nuestro servicio para complementar el suyo. En esos casos es interesante dotar a ambos puntos de un certificado de seguridad que haga que quien recibe la llamada sólo la acepte si (entre otras cosas) se le pasa el certificado correcto.
Ya os contaré cómo se hace esto en una aplicación web, que no es complicado, hoy quiero apuntaros a un caso más global que es el de hacerlo en una aplicación de Azure Active Directory, ya que con ellas puedes securizar muchas cosas, incluso las que no son tuyas. Ya hemos creado aplicaciones de AAD, por ejemplo cuando vimos el sistema de login con O365. Ahí, le dábamos permisos a la aplicación para acceder a la API CREST de Office 365 y posteriormente nos autenticábamos usando un código de autorización siguiendo el protocolo oAuth2.
Hoy imaginaros que el caso es el mismo, pero que además queremos que la aplicación que hemos hecho sólo la puedan usar personas que tengan un certificado concreto, de tal modo que no bastará con que les roben el usuario y la contraseña -porque ya sabemos que una contraseña es imposible de adivinar y nadie usa 1234-. Para ello lo primero será que creemos un certificado -lo vimos hace un tiempo- y pasárselo a quienes queremos autorizar a usar nuestra app para que lo instalen en sus sistemas. Cuando accedan con un navegador a nuestra app por https, se les pedirá que seleccionen un certificado de su máquina para identificarse.
Todo esto, claro, siempre y cuando le hayamos dicho a nuestra app que quien quiera usarla tiene que pasar un certificado. Para que esto sea así, tendremos que subir el certificado a la aplicación de Azure Active Directory, pero si miráis bien el panel de control, ¡no encontraréis un botón para tal fin en ningún sitio! Lo que si encontraréis, cuando estáis dentro de la configuración de la aplicación, es un botón que dice «Manage manifest»:
Con ese botón podéis descargaros el manifiesto de la aplicación, que es dónde está definida en json. Veréis que el campo keyCredentials como un array vacío, al que tendréis que añadir un objeto con la siguiente forma:
{ "customKeyIdentifier": "XXXXXXXXXXXXXXXXXXXXXXXXXXX=", "keyId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "type": "Asymmetricx509Cert", "usage": "verify", "value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXQ==" }
El customKeyIdentifier y el value, son valores que representan al certificado pfx (el mismo que hemos pasado a la gente que va a usar la aplicación), y se pueden obtener convirtiendo un certificado pfx a Base64, como vimos hace un tiempo. El keyId no es más que un GUID que puedes generar como mejor te parezca, ya que se usa sólo para identificar de manera única al certificado.
Cuando halláis editado el manifiesto, lo volvéis a subir con el mismo botón de la consola de administración y todo listo.
Con una cosa que tenéis que tener «cuidado» es que (ya que es un array), si queréis añadir más certificados en otro momento, al bajaros el manifest veréis el value a null. No os alarméis, y no lo volváis a añadir, ya que una vez añadido el certificado no hace falta resubirlo.
Si en algún momento lo queréis borrar, no tenéis más que editar de nuevo el archivo quitando el objeto que hemos añadido hoy y resubirlo.
Trackbacks/Pingbacks
[…] Seguir leyendo en CantabriaTIC. […]