Tabla de Contenidos

implementación de oauth2 Microsoft en Orfeo NG

Descripción

Como conectar un servicio a la autenticación “Moderna” de Microsoft.

Introducción

Microsoft desarrollo Microsoft Identity platform. Basado en 2 protocolos Oauth 2.0 y OpenID

https://auth0.com/es/intro-to-iam/what-is-oauth-2

https://openid.net/developers/how-connect-works/

El flujo de la aplicación es

1. Solicitud de autorización

aplicación »» oauth2 server »» plataforma de identidad (redes sociales, cuentas de correo)

 a) Si es válido:

 plataforma de identidad »> oauth2 server »> código de autorización »> aplicación cliente

 b)  Sino es válido le entregará un error 401 no autorizado, otros errores pueden deberse a problemas de configuración o intermintencia en la conexión.


2. Con este código (code) se procede a realizar el resto de solicitudes para acceder a las apis o servicios. Para realizar esta solicitud se debe indicar que servicio o grupo de servicios se requiere para que le sea asignado un Token (para el caso microsoft es una cadena de 500 caracteres, planean subirlo a 1000 caracteres de longitud).

3. El Token tiene un tiempo de expiración en segundos. Después de ese tiempo se debe solicitar un Token de refresco con el mismo Token ya entregado. Si la sesión se vence totalmente se debe realizar nuevamente el proceso completo de solicitud de código (Code).

 Para el caso de orfeo NG se utilizo Microsoft Authentication Library MSAL como librería que realiza todo el proceso de manera semi automática en el frontend. https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular

Para el backend se utilizo la librería webklex/php-imap https://www.php-imap.com/

Prerrequisitos

Instalar Microsoft Authentication Library MSAL y webklex/php-imap

usar una de la ramas que tenga instalada la versión oauth  ejm hotfix/fonprecon
 

Procedimiento

A. Instalación básica

Verificar en el backend que el composer json tenga “webklex/php-imap”: “^5.2” en las dependencias

Verificar en el frontend el package.json exista “@azure/msal-angular”: “^2.5.8”, “@azure/msal-browser”: “^2.37.1”,

Ejecutar composer updade y npm install respectivamente

B. Configuración

Pasos para realizar la activación del Oauth en el frontend:

  1. ingresar a la cuenta de azure o office 365 con la cuenta administradora.
  2. seleccionar la opción aplicaciones empresariales sino tiene una creada debe crear una.
  3. Luego de creada hacer clic en la aplicación para ver los datos de configuración, de ella se debe tomar:

Id de aplicación, Id de directorio (inquilino)

  1. Debe asignar una url de redirección, esta es la url donde quedará disponible la aplicación debe ser un dominio local o un dominio de primer nivel (se puede simular editando el archivo de host asignando un dominio a la dirección IP).
  2. Para el caso de Orfeo Ng se selecciona “Aplicación de página única” en tipo de aplicación
  3. Se debe activar los flujos de conseción implicita e híbridos
  4. Se debe activar los flujos de clientes públicos.
  5. Agregar un secreto del cliente o un certificado SSL, si agrega un secreto del cliente recuerde copiarlo y guardarlo en otro lugar, después que se muestra la primera vez no volverá a ser visible.
  6. Debe agregar los permisos de API, se debe activar profile, email openid, User.read IMAP.AccessAsApp, En la sección Office 365 Exchange Online permitr el acceso IMAP.AccessAsApp.
  7. En el caso de las cuentas básicas (Microsoft office 365) se deben agregar los correos permitidos manualmente a la aplicación, para permitir la autorización de uso de la aplicación creada. (No permite conexiones de otros correos aparte de los ingresados manualmente)
  8. Luego de esto debe proceder a configurar los datos del inquilino (Aplicación empresarial) en Orfeo NG
  9. en la carpeta environments encontrará un archivo microsoft.ts en el config tiene un objeto JSON donde deberá agregar

clientId = id del Ciente
clientSecret = secreto del cliente generado
authority = ‘https://login.microsoftonline.com/id del inquilino’
redirectUri = url de redirección que ingreso y donde se aloja la aplicación
tenant: id del inquilino

Para realizar la configuración en el backend:

En api/params.php se encuentra un array llamado imapOptions, en el se configuran los parámetros de IMAP del proveedor de cliente, en especial authentication debe quedar oauth. El resto de los parámetros son convencionales a como se trabajan en la versión sin oauth.

 

'imapOptions' ⇒ [
'oauth' ⇒ true,
'timezone' ⇒ 'America/Bogota',
'provider' ⇒ [
'host' ⇒ 'outlook.office365.com',
'port' ⇒ 993,
'encryption' ⇒ 'ssl',
'validate_cert' ⇒ true,
'username' ⇒ '',
'password' ⇒ '',
'protocol' ⇒ 'imap',
'authentication'⇒ 'oauth'
],


Problemas

1. El usuario no tenga una licencia de Office365 activa, procede a asignársela. Error 401

2. Para imap se debe solicitar un acceso especial a 'https://outlook.office365.com/IMAP.AccessAsUser.All' solo e independiente de otras solicitudes, no permite solicitar el token en concurrencia con otros servicios

3. El correo del usuario no se encuentre registrado en la aplicación para cuentas básicas.

4. Que el servidor de Microsoft Identity Services no esté respondiendo de forma adecuada, esperar unos segundos y volver a solicitar acceso.

5. La aplicación está arrojando errores al momento de solicitar la contraseña, los mensajes son descriptivos e indican que puede estar faltando en la configuración del inquilino y acceso a API

6. La documentación puede quedar desactualizada con respecto al código, es preferible consultar la documentación interna del código y los tutoriales en github.
 

Referencias

https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-overview

https://learn.microsoft.com/en-us/azure/active-directory/develop/index-spa

https://auth0.com/es/intro-to-iam/what-is-oauth-2

https://openid.net/developers/how-connect-works/

https://learn.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-angular-auth-code

https://www.php-imap.com/

FIN


Advertencia

Este documento es privado y es de u so exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.