Compartir a través de


Agregar código para habilitar el inicio de sesión único para acciones universales de tarjetas adaptables

Los pasos de autenticación para el inicio de sesión único (SSO) son similares a los de un bot en Teams. A continuación se indican los pasos para lograr el inicio de sesión único en Adaptive Cards Universal Action.

Nota:

Para implementar el flujo de SSO, debe tener un chat uno a uno declarado para el bot en el manifiesto de la aplicación. Cuando un usuario de la aplicación invoca el flujo de SSO a través del protocolo de tarjeta Action.Execute adaptable, aparece un mensaje para permitir que el usuario de la aplicación instale la aplicación en un ámbito personal si no la ha instalado.

Adición de código para controlar un token de acceso

Asegúrese de que ha configurado el bot en Microsoft Entra ID para obtener el token de acceso. Puede actualizar el código para controlar el token de acceso para acciones universales de tarjetas adaptables en el bot.

Si hay un token almacenado en caché, el bot usa el mismo token. Si no hay ningún token disponible, la tarjeta adaptable envía una respuesta de invocación al servicio bot, que envía una tarjeta OAuth con los siguientes valores que incluye un tokenExchangeResource para designar una operación de SSO:

{
"statusCode": 401,
"type": "application/vnd.microsoft.activity.loginRequest",
"value": {
   "text": "Please sign-in",
   "connectionName": "<configured-connection-name>",
   "tokenExchangeResource": {
      "id": "<unique-indentifier>",
      "uri": "<application-or-resource-identifier>",
      "providerId": "<optional-provider-identifier>"
   },
   "buttons": [
      {
      "title": "Sign-In",
         "text": "Sign-In",
         "type": "signin",
         "value": "<sign-in-URL>"
      }
   ]
}
}

El servicio bot ofrece la respuesta de invocación al cliente de Teams, que usa el tokenExchangeResource valor y el token de cliente de Teams para obtener un token en nombre de o un token intercambiable de Microsoft Entra ID.

Se produce un error en el inicio de sesión único cuando el cliente de Teams omite el tokenExchangeResource valor por cualquier motivo, incluidos los valores no válidos, los errores de recuperación de tokens intercambiables o si Microsoft Entra ID no admite el valor. A continuación, el cliente de Teams desencadena el flujo nominal de inicio de sesión o OAuth. Se recomienda proporcionar una dirección URL de inicio de sesión en la respuesta para que el flujo de OAuth funcione.

Si el usuario de la aplicación usa una tarjeta adaptable por primera vez, debe dar su consentimiento para que la aplicación use su identidad. Aparece el siguiente cuadro de diálogo:

Captura de pantalla que muestra el cuadro de diálogo consentimiento.

Cuando el usuario de la aplicación selecciona Ver y aceptar, la vista de consentimiento de permisos de Microsoft Entra existente aparece para mostrar todos los permisos. El usuario de la aplicación puede continuar con el flujo de autenticación.

Agregar código para recibir el token

  1. El cliente de Teams vuelve a enviar el original adaptiveCard/action al bot junto con el token de la siguiente manera:

    {
    "type": "invoke",
    "name": "adaptiveCard/action"
    "value": {
    "action": {
       "id": "abc123",
       "type": "Action.Execute",
       "verb": "saveCommand",
       "data": {
          "firstName": "Jeff",
          "lastName": "Derstadt"
       }
    },
    "authentication": {
       "id": "8769-xyz",
       "connectionName": "oauthConnection",
       "token": "...single sign-on token..."
    }
    }
    }
    

    El siguiente fragmento de código muestra cómo recibir la actividad de invocación en bot service:

            protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, 
         CancellationToken cancellationToken)
            {
              JObject value = JsonConvert.DeserializeObject<JObject>
              (turnContext.Activity.Value.ToString());
              JObject authentication = null;
              if (value["authentication"] != null)
              {
              authentication = JsonConvert.DeserializeObject<JObject>(value["authentication"].ToString());
              }
            }
    
  2. El cliente de Teams envía una solicitud de invocación al bot. El bot recibe el consentimiento de los usuarios de la aplicación y usa su identidad para ayudar al proceso de intercambio de tokens con bot framework token service y Microsoft Entra ID. El servicio de token de bot framework entrega el token de acceso de los usuarios de la aplicación al bot.

    • Bot Service omite el token de acceso si el valor es incorrecto.

    • Bot Service que experimenta un error al realizar el intercambio de tokens debe responder con un error o con una segunda solicitud de inicio de sesión que no incluya información de SSO. Si el servicio de bot responde con un error, el error debe ser:

       {
        "statusCode" = 412,
        "type" = "application/vnd.microsoft.error.preconditionFailed",
        "value" = {
          "code" = "412",
          "message" = "authentication token expired"    }
          }
      
    • Cuando se produce un error en el inicio de sesión único, el cliente de Teams muestra un botón de inicio de sesión en el pie de página de la tarjeta para iniciar el flujo de inicio de sesión nominal.

  3. El bot usa el token de acceso en nombre del usuario de la aplicación para realizar sus acciones.

  4. El bot devuelve una respuesta que no es de error al cliente de Teams mediante una tarjeta o un mensaje.

Nota:

Para controlar el token de acceso en caso de que el usuario de la aplicación cierre la sesión, consulte Control del cierre de sesión del usuario de la aplicación.

Ejemplo de código

Ejemplo de nombre Descripción .NET Node.js Manifiesto
Inicio de sesión único para las acciones universales de Adaptive Cards En este código de ejemplo se muestra cómo habilitar la autenticación sso para las acciones universales de tarjetas adaptables en el bot. View View Ver

Consulte también