Inicio de sesión único con un Chat en web

SE APLICA A: SDK v4

El inicio de sesión único (SSO) permite que un cliente, como un control de Chat en web, se comunique con un bot en nombre del usuario. Actualmente, solo se admite el proveedor de identidades de Microsoft Entra ID.

Normalmente, un Chat en web se inserta en una página de sitio web. Cuando el usuario inicia sesión en el sitio web, el Chat en web invoca un bot en nombre del usuario. El token del cliente del sitio web, en función de las credenciales del usuario, se intercambia por otro para acceder al bot. De este modo, el usuario no tiene que iniciar sesión dos veces; la primera vez en el sitio web y la segunda vez en el bot, por lo tanto, el término SSO.

En el diagrama siguiente se muestra el flujo de SSO al usar un cliente Chat en web.

Sequence diagram for sign-on flow for Web Chat.

En el caso de error, el inicio de sesión único retrocede al comportamiento existente de mostrar la tarjeta de OAuth. Se puede producir un error cuando se requiere el consentimiento del usuario o cuando se produce un error en el intercambio de tokens.

Vamos a analizar el flujo.

  1. El usuario inicia sesión en el sitio web.

  2. El Chat en web recibe una actividad de desencadenador de OAuth.

  3. El Chat en web inicia una conversación con el bot a través de una actividad de desencadenador de OAuth.

  4. El bot devuelve una tarjeta OAuth al Chat en web.

  5. El Chat en web intercepta la tarjeta de OAuth antes de mostrarla al usuario y comprueba si contiene la propiedad TokenExchangeResource.

  6. Si la propiedad existe, el Chat en web debe obtener un token intercambiable para el usuario, que debe ser un token de Microsoft Entra ID.

  7. El Chat en web envía una actividad Invoke al bot con el cuerpo que se muestra a continuación.

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique ID>",
            "connectionName": "<connection name on the bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  8. El bot procesa TokenExchangeInvokeRequest mediante la emisión de una solicitud al Servicio de Bot de Azure AI para obtener un token intercambiable.

  9. El Servicio de Bot de Azure AI envía el token al bot.

  10. El bot devuelve una respuesta TokenExchangeInvokeResponse al Chat en web. El Chat en web espera hasta que recibe el TokenExchangeInvokeResponse.

    {
        "status": "<response code>",
        "body": {
            "id":"<unique ID>",
            "connectionName": "<connection Name on the bot (from the OAuth Card)>",
            "failureDetail": "<failure reason if status code isn't 200, null otherwise>"
        }
    }
    
  11. Si TokenExchangeInvokeResponse tiene una propiedad status con el valor 200, Chat en web no muestra la tarjeta de OAuth. Para cualquier otro valor de status o si no se recibe la respuesta TokenExchangeInvokeResponse, el Chat en web muestra la tarjeta de OAuth al usuario. Esto garantiza que el flujo de inicio de sesión único recurre al flujo de OAuthCard normal en el caso de que se produzcan errores o que no se hayan cumplido las dependencias, como el consentimiento del usuario.

Para obtener un ejemplo de implementación, consulte este ejemplo de SSO.