Flujo de autenticación de Microsoft Teams para bots

OAuth 2,0 es un estándar abierto para la autenticación y autorización usado por Azure Active Directory (Azure AD) y muchos otros proveedores de identidades. Una descripción básica de OAuth 2,0 es un requisito previo para trabajar con la autenticación en Microsoft Teams. esta es una buena introducción que es más fácil de seguir que la especificación formal. El flujo de autenticación para fichas y bots es un poco diferente: las pestañas son muy similares a los sitios web para que puedan usar OAuth 2,0 directamente, mientras que los bots no son y deben hacer algunas cosas de manera diferente, pero los conceptos básicos son idénticos.

Consulte el repositorio de GitHub ejemplo de autenticación de Microsoft Teams para obtener un ejemplo en el que se muestra el flujo de autenticación para bots con node. js y el tipo de concesión de código de autorización OAuth 2,0.

Diagrama de secuencia de autenticación de bot

  1. El usuario envía un mensaje al bot.
  2. El bot determina si el usuario tiene que iniciar sesión.
    • En este ejemplo, el bot almacena el token de acceso en su almacén de datos de usuario. Pide al usuario que inicie sesión si no tiene un token validado para el proveedor de identidad seleccionado. (Código de vista)
  3. El bot crea la dirección URL de la página de inicio del flujo de autenticación y envía una tarjeta al usuario con una signin acción. (Código de vista)
    • Al igual que otros flujos de autenticación de aplicaciones en Microsoft Teams, la página de inicio debe estar validDomains en un dominio que se encuentra en la lista y en el mismo dominio que la página de redireccionamiento posterior al inicio de sesión.
    • Importante: el flujo de concesión de código de autorización de OAuth state 2,0 llama a un parámetro en la solicitud de autenticación que contiene un token de sesión único para evitar un ataque de falsificación de solicitud entre sitios. En el ejemplo se usa un GUID generado aleatoriamente.
  4. Cuando el usuario selecciona el botón de inicio de sesión , Microsoft Teams abre una ventana emergente y se desplaza a la página de inicio.
  5. La página de inicio redirige al usuario al punto de conexión del authorize proveedor de identidades. (Código de vista)
  6. En el sitio del proveedor, el usuario inicia sesión y concede acceso al bot.
  7. El proveedor lleva al usuario a la página de redireccionamiento de OAuth del bot con un código de autorización.
  8. El bot canjea el código de autorización para un token de acceso y, de forma provisional , asocia el token con el usuario que inició el flujo de inicio de sesión. A continuación, se denomina un token provisional.
    • En el ejemplo, el bot asocia el valor del state parámetro con el identificador del usuario que inició el proceso de inicio de sesión para que más adelante pueda hacerlo con el state valor devuelto por el proveedor de identidad. (Código de vista)
    • Importante: el bot almacena el token que recibe del proveedor de identidad y lo asocia a un usuario específico, pero se marca como "pendiente de validación". El token provisional no se puede usar todavía; debe validarse aún más:
      1. Validar lo que se recibe del proveedor de identidades. El valor del state parámetro debe confirmarse con respecto a lo que se guardó anteriormente.
      2. Validar lo que se recibe de Microsoft Teams. Se realiza una validación de autenticación en dos pasos para garantizar que el usuario que ha autorizado el bot con el proveedor de identidades es el mismo usuario que está conversando con el bot. Esto protege contra ataques de "Man in the Middle " y de suplantación de identidad (phishing) . El bot genera un código de comprobación y lo almacena, asociado al usuario. Los equipos envían automáticamente el código de comprobación como se describe a continuación. (Código de vista)
  9. La devolución de llamada de OAuth representa una página notifySuccess("<verification code>")que llama. (Código de vista)
  10. Microsoft Teams cierra la ventana emergente y envía el <verification code> mensaje que se notifySuccess() envía de vuelta al bot. El bot recibe un mensaje de invocación con name = signin/verifyState.
  11. El bot comprueba el código de comprobación entrante con el código de comprobación almacenado con el token provisional del usuario. (Código de vista)
  12. Si coinciden, el bot marca el token como validado y listo para su uso. De lo contrario, se produce un error en el flujo de autenticación y el bot elimina el token provisional.

Nota

Si experimenta problemas con la autenticación en dispositivos móviles, asegúrese de que el SDK de JavaScript se haya actualizado a la versión 1.4.1 o posterior.

Ejemplos

Para ver el código de ejemplo que muestra el proceso de autenticación de bot, consulte:

Más detalles

Para ver los tutoriales de implementación detallados para la autenticación de bot dirigidas a Azure AD vea: