Como conectar un servicio a la autenticación “Moderna” de Microsoft.
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/
Instalar Microsoft Authentication Library MSAL y webklex/php-imap
usar una de la ramas que tenga instalada la versión oauth ejm hotfix/fonprecon
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
Pasos para realizar la activación del Oauth en el frontend:
Id de aplicación, Id de directorio (inquilino)
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'
],
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.
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.