====== 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 "[[https://packagist.org/packages/webklex/php-imap|webklex/php-imap]]": "[[https://packagist.org/packages/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:** - ingresar a la cuenta de azure o office 365 con la cuenta administradora. - seleccionar la opción aplicaciones empresariales sino tiene una creada debe crear una. - 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) - 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). - Para el caso de Orfeo Ng se selecciona “Aplicación de página única” en tipo de aplicación - Se debe activar los flujos de conseción implicita e híbridos - Se debe activar los flujos de clientes públicos. - 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. - 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. - 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) - Luego de esto debe proceder a configurar los datos del inquilino (Aplicación empresarial) en Orfeo NG - 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. ----   ==============================================================