Seguridad

Estos son los componentes que están disponibles en la categoría Seguridad del editor de flujo de diálogo basado en YAML.

System.OAuth2Client

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte OAuth 2.0 Client.

Utilice este componente para obtener un token de acceso de OAuth2 del tipo de permiso Credenciales de cliente. Es decir, puede utilizarlo para obtener un token de acceso basado en las credenciales del cliente, no en el nombre y la contraseña del usuario. Puede utilizar este componente para obtener un token que permita acceder a los recursos del cliente protegidos por Oracle Identity Cloud Service u Oracle Access Manager (OAM).

Si necesita acceder a recursos en nombre de un usuario, consulte System.OAuth2AccountLink y System.OAuthAccountLink.

Para poder utilizar este componente en una aptitud, debe realizar las siguientes tareas:

  1. Si aún no está registrado, registre el cliente con el proveedor de identidad, como se describe en Registro de proveedor de identidad.
  2. Agregue un servicio de autenticación de credenciales de cliente para el proveedor de identidad, como se describe en Servicios de autenticación.
Propiedad Descripción ¿Obligatoria?
authenticationService Nombre del servicio de credenciales de cliente creado en la interfaz de usuario de Servicios de autenticación para el proveedor de identidad de OAuth2.
accessTokenVariableName Especifica la variable en la que se va a almacenar el token de acceso. Puede declararla en el nodo context como variable, cadena u otro tipo de variable soportado. También puede ser una variable con ámbito de usuario. Por ejemplo: user.accessToken.

Este componente no incluye ninguna acción. Para manejar los problemas del sistema que puedan surgir, agregue una transición que pase a un estado que pueda manejar este tipo de errores.

A continuación, se muestra un ejemplo de un estado que utiliza este componente:

  getAccessToken:
    component: "System.OAuth2Client"
    properties:
      authenticationService: "myAuthenticationService"
      accessTokenVariableName: "myAuthServiceToken"
    transitions:
      next: "next"
      error: "error" # handle auth service issues

System.OAuth2AccountLink

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte OAuth 2.0 Enlace de cuenta.

Utilice este componente para obtener un token de acceso de usuario OAuth2 (código de autorización de tipo de permiso) para los recursos protegidos por OCI IAM, Oracle Access Manager (OAM), la plataforma de identidad de Microsoft o la autorización de Google OAuth 2.0. Este componente completa todos los pasos del flujo de OAuth2 en 3 partes y devuelve el token de acceso de OAuth2.

Puede utilizar el valor requiresAuthorization para indicar qué estados requieren autorización antes de que se puedan llamar. Para los estados que requieren autorización, si el usuario aún no lo ha autorizado, se llama al estado System.OAuth2AccountLink y, a continuación, el flujo llama al estado que requiere autorización. Puede aprender a utilizar esta función en Autorización de usuario en chats de grupo (funciona para todos los tipos de chats, no solo para chats de grupo).

Si necesita obtener un token de acceso con el tipo de permiso Credenciales de cliente para acceder a los recursos del cliente, consulte System.OAuth2Client.

Para poder utilizar este componente en una aptitud, debe realizar las siguientes tareas:

  1. Si aún no se ha registrado, registre el cliente con el proveedor de identidad, tal y como se describe en Registro de proveedor de identidad.
  2. Agregue un servicio de autenticación para el proveedor de identidad, como se describe en Servicios de autenticación.

Algunos proveedores de identidad han emitido tokens de refrescamiento. Cuando se utilizar este componente, Digital Assistant almacena el token de refrescamiento para el período de retención especificado para el servicio de autenticación. El backend de Digital Assistant puede utilizar el token de refrescamiento, si está disponible, para obtener un nuevo token de acceso sin que el usuario tenga que volver a conectarse.

Consejo:

En aptitudes con la versión 21.04 y posteriores de la plataforma, los valores por defecto para las propiedades cancelLabel, linkLabel y prompt se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje para la clave OAuth2AccountLink - <nombre de propiedad>. Si utiliza el grupo de recursos de la aptitud para cambiar el valor por defecto, no es necesario incluir la propiedad en el componente a menos que desee sustituir el valor por defecto.

También puede cambiar los mensajes Otro - oauthCancelPrompt y Otro - oauthSuccessPrompt en el grupo de configuración.

Propiedad Descripción ¿Obligatoria?
accessTokenVariableName Especifica la variable en la que se va a almacenar el token de acceso. Si la variable tiene un ámbito de usuario, como user.accessToken, se puede compartir entre distintas aptitudes.

El valor por defecto es accessToken.

No
authenticatedUserVariableName Especifica la variable en la que almacenar el nombre de usuario autenticado (el nombre conocido por el proveedor de identidad). Si la variable tiene un ámbito de usuario, como user.authenticatedUser, se puede compartir entre distintas aptitudes.

El valor por defecto es authenticatedUser.

No
authenticationService Nombre del servicio de código de autorización creado en la interfaz de usuario de Servicios de autenticación para el proveedor de identidad de OAuth2.
autoNumberPostbackActions Si se establece en true, esta opción prefija un número a la opción de cancelación, que es una acción de devolución del servidor. No prefija un número a la opción para obtener un token de acceso, porque esta es una acción de URL, es decir, una acción del cliente que no se puede prefijar con un número de secuencia.

Aunque esta opción no se haya definido en true, la numeración automática se puede aplicar a acciones de devolución si la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true. La numeración automática específica del canal se puede aplicar a cualquier bot de aptitud registrado en un asistente digital:

${(system.message.channelConversation.channelType=='twilio')?then('true','false')}

Consulte Numeración automática para canales de solo texto en flujos de diálogo de YAML y

Numeración automática para asistentes digitales

No
cancelLabel Se utiliza para sustituir la etiqueta del botón en el que los usuarios pueden hacer clic para salir del estado sin llamar al cuadro de diálogo de autenticación. La etiqueta predeterminada es Cancel. No
enableSingleSignOn (Solo MS Teams) Si ha configurado la conexión única (SSO) de Microsoft Teams, puede definirla en true para que los usuarios que ya hayan iniciado sesión en MS Teams no tengan que iniciar sesión en la aptitud. El valor por defecto es false. Consulte Configuración de conexión única para canales de Microsoft Teams.

La conexión única no se puede usar con los componentes de calendario.

No
footerText Mejora el cuadro de diálogo de conexión agregando texto bajo las opciones de conexión y cancelación. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. No
linkLabel Se utiliza para sustituir la etiqueta del botón en el que los usuarios pueden hacer clic para llamar al cuadro de diálogo de autenticación. La etiqueta predeterminada es Get an access token. No
prompt Cadena que se utiliza para pedir datos al usuario, en lugar del valor por defecto Please sign in. No
showCancelOption (Opcional) Permite especificar si se debe mostrar o no el botón Cancelar. Por defecto, esta opción se establece en true, lo que significa que se muestra el botón Cancelar. En algunos casos, como en el caso de canales SMS, puede que no quiera que este botón se muestre. Puede configurar este comportamiento con una expresión como:
${(system.message.channelConversation.channelType=='twilio')?then('false','true')}
No
translate Utilice esta propiedad booleana opcional para sustituir el valor booleano de la variable de contexto autoTranslate. Tenga en cuenta que autoTranslate se establece en false (excluir de la traducción automática) salvo si la variable de contexto se ha definido explícitamente en true. No
updateUserProfile Si el proveedor de identidad es un dominio de identidad de OCI IAM y desea almacenar el perfil del usuario desde IAM durante la sesión, defina esta propiedad en true. Cuando se comprueba la autenticación de un usuario, si esta propiedad está definida en true, el componente intentará recuperar los datos del perfil de usuario del proveedor de identidad y definir los resultados en la asignación userProfile.<servicio de autorización>. El valor por defecto es false. Consulte Store User Profile for the Duration. No

Este componente puede devolver las siguientes acciones:

Acción Descripción
fail El usuario ha hecho clic en el botón Cancelar.
pass El token de acceso se ha recuperado correctamente.
textReceived El usuario introdujo texto, en lugar de hacer clic en el botón Cancelar o autenticarse correctamente.

Cuando el motor de diálogo encuentra el componente, el bot de aptitudes solicita al usuario dos enlaces: Obtener un token de acceso y Cancelar (puede utilizar linkLabel y cancelLabel para cambiar el texto del enlace).


Descripción de oauth2accountlinksignin1.png a continuación
Descripción de la ilustración oauth2accountlinksignin1.png

Si el usuario hace clic en el enlace para obtener un token de acceso, se muestra la página de conexión del proveedor de identidad o el diálogo de autenticación especificado por el servicio de autenticación. Tras establecer una conexión correcta, obtiene el token de acceso, define los valores para las variables identificadas por accessTokenVariableName y authenticatedUserVariableName y, a continuación, fluye al estado con el nombre de la acción pass (o al siguiente estado si no hay una acción pass). Si el usuario cancela, la acción de devolución se establece en fail. Si el usuario introduce texto, devuelve la acción textReceived.


Descripción de oauth2accountlinksignin2.png a continuación
Descripción de la ilustración oauth2accountlinksignin2.png

Como se ha mencionado anteriormente, puede definir requiresAuthorization para un estado a fin de garantizar que el usuario esté autorizado antes de llamar al componente de estado. Si el usuario aún no está autorizado, el diálogo llama a la acción system.authorizeUser en defaultTransitions. Ejemplo:

main: true
name: RequiresAuthorizationExample
context:
  variables:
    iResult: "nlpresult"

defaultTransitions:
  actions:
    system.authorizeUser: "login"

states:
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        reg.general.showPasscode: "showPasscode"
        reg.general.showPhoneNumber: "showPhoneNumber"
        unresolvedIntent: "handleUnresolved"        

  showPasscode:
    component: "System.Output"
    requiresAuthorization: true
    properties:
      text: "XYZABC123"
    transitions:
      return: "done"          
       
  showPhoneNumber:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "555-1212"
    transitions:
      return: "done"
       
  handleUnresolved:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "You can ask for my phone number or ask for the passcode."
    transitions:
      return: "done"
         
  login:
    component: "System.OAuth2AccountLink"
    properties:
      prompt: "${profile.firstName}, please login"
      authenticationService: "MyAuthenticationService"
      accessTokenVariableName: "user.accessToken"
      authenticatedUserVariableName: "user.authenticatedUserId"
    transitions:
      actions:
        pass : "${system.requestedState}"
        fail : "handleFailedLogin"
        textReceived: "intent"       

  handleFailedLogin:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "Sorry, you aren't authorized to do that"
    transitions:
      return: "done"     

Almacenamiento del perfil de usuario durante la sesión

Si su aptitud necesita controlar el flujo de diálogo en función del perfil de dominio de identidad de OCI IAM del usuario, defina la propiedad updateUserProfile del componente System.OAuth2AccountLink en true. Esto le permite obtener la información de perfil del usuario de IAM de la asignación userProfile.<authorization service>.

Cuando updateUserProfile se define en true, el componente System.OAuth2AccountLink recupera el perfil de usuario de IAM y almacena los datos en un objeto en la asignación userProfile.<authorization service>.

Supongamos, por ejemplo, que el flujo de diálogo tiene este estado:

  oauth2AccountLink:
    component: "System.OAuth2AccountLink"
    properties:
      authenticationService: "myIAMProvider"
      authenticatedUserVariableName: "user.authuser"
      accessTokenVariableName: "user.accessToken"
      updateUserProfile: true
    transitions:
      actions:
        pass: "askGreeting"
        fail: "fail"
        textReceived: "authTextReceived"

Una vez que el usuario se ha conectado, el objeto userProfile.myIAMProvider tiene predefinido el perfil del usuario de IAM, como se muestra en este ejemplo:

"userProfile.myIAMProvider": {
  "sub": "myUsername",
  "website": "",
  "birthdate": "",
  "email_verified": false,
  "gender": "",
  "updated_at": 1584561296,
  "name": "First Last",
  "preferred_username": "myUsername",
  "given_name": "First",
  "family_name": "Last",
  "email": "first.last@oracle.com",
  "appRoles": [
    {
      "appName": "some-instance-1_APPID",
      "displayName": "RoleName",
      "appID": "1234567abcd12345",
      "name": "some-instance-1_APPID",
      "adminRole": false,
      "legacyName": "some-instance-1.RoleName",
      "id": "1234567abcdefg",
      "$ref": "http://some/path/v1/AppRoles/a111234567abcdefg"
    }
  ]
}

Manejar varios servicios de autenticación

Si el bot de aptitud necesita tokens de acceso de varios servicios de autenticación, puede especificar nombres exclusivos de variables de usuario autenticado y tokens de acceso para cada uso de este componente, como se muestra en este ejemplo:

...
states:
# First Authentication Service
  getAccessToken1:
    component: "System.OAuth2AccountLink"
    properties:
      authenticationService: "AuthService1"
      accessTokenVariableName: "user.accessToken1"
      authenticatedUserVariableName: "user.authenticatedUser1"
    transitions:
      actions:
        pass: "getAccessToken2"
        textReceived: "handleAuthTextResponse"
        fail: "authCancelled"
# Second Authentication Service
  getAccessToken2:
    component: "System.OAuth2AccountLink"
    properties:
      authenticationService: "AuthService2"
      accessTokenVariableName: "user.accessToken2"
      authenticatedUserVariableName: "user.authenticatedUser2"
    transitions:
      actions:
        pass:  "getBankUserProfile"
        textReceived: "handleAuthTextResponse"
        fail: "authCancelled"
...

System.OAuth2ResetTokens

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Restablecimiento de tokens OAuth 2.0.

Utilice este componente para revocar todos los tokens de acceso de usuario y los tokens de refrescamiento de usuario conectado del proveedor de identidad que representa el servicio de autenticación. También elimina los tokens de refrescamiento de la base de datos. Para utilizar este componente, debe proporcionar el URL del token de refrescamiento de revocación del proveedor de identidad en la interfaz de usuario del servicio de autenticación.

La aptitud debe incluir un estado que utilice el componente OAuth2AccountLink para el mismo servicio de autenticación y se debe llamar antes que el estado que utiliza el componente System.OAuth2ResetTokens.

Propiedad Descripción ¿Obligatoria?
authenticationService Nombre del servicio creado en la interfaz de usuario del servicio de autenticación para el proveedor de identidad de OAuth2. Este servicio debe tener un URL de token de refrescamiento de revocación válido.

Este componente puede devolver la siguiente acción:

Acción Descripción
noRefreshTokenFound El servicio de autenticación no tiene ningún token de refrescamiento para el usuario.

System.OAuthAccountLink

Nota

En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte OAuth Enlace de cuenta.

Utilice este componente para obtener el código de autorización para servicios protegidos por el flujo de concesión de código de autorización, como LinkedIn, Twitter, Google o Microsoft. Los componentes personalizados de la aptitud pueden intercambiar el código de autorización por un token de acceso, que luego utilizan para llamar el servicio final.

El componente dirige en primer lugar al usuario a la página de conexión del proveedor de identidad. Después de una conexión correcta, el componente devuelve el código de autorización en una variable, que se utiliza para transferir el código de autorización al componente personalizado. La API de componente personalizado debe intercambiar el código de autorización, el ID de cliente y el secreto de cliente para un token de acceso de usuario de OAuth2.

Puede utilizar el valor requiresAuthorization para indicar qué estados requieren autorización antes de que se puedan llamar. Para los estados que requieren autorización, si el usuario aún no ha autorizado, se llama al estado System.OAuthAccountLink y, a continuación, el flujo llama al estado que requiere autorización. Puede aprender a utilizar esta función en Autorización de usuario en chats de grupo (funciona para todos los tipos de chats, no solo para chats de grupo).

Consejo:

En aptitudes con la versión 21.04 y posteriores de la plataforma, los valores por defecto para las propiedades cancelLabel, linkLabel y prompt se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en Icono Grupos de recursos, seleccione el separador Configuración y cambie el mensaje para la clave OAuthAccountLink - <nombre de propiedad>. Si utiliza el grupo de recursos de la aptitud para cambiar el valor por defecto, no es necesario incluir la propiedad en el componente a menos que desee sustituir el valor por defecto.

También puede cambiar los mensajes Otro - oauthCancelPrompt y Otro - oauthSuccessPrompt en el grupo de configuración.

Propiedad Descripción ¿Obligatoria?
authorizeURL URL de conexión. La propiedad authorizeURL describe cómo configurar este URL.
autoNumberPostbackActions Cuando se establece en true, esta opción prefija con un número la opción de cancelación. Aunque esta opción no se defina en true, la numeración automática se puede aplicar a elementos de lista cuando la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true. La numeración automática específica del canal se puede aplicar a cualquier bot de aptitud registrado en un asistente digital:
${(system.message.channelConversation.channelType=='twilio')?then('true','false')}
No
cancelLabel Se utiliza para sustituir la etiqueta del botón en el que los usuarios pueden hacer clic para salir del estado sin llamar al cuadro de diálogo de autenticación. La etiqueta predeterminada es Cancel. No
footerText Mejora el cuadro de diálogo de conexión agregando texto bajo las opciones de conexión y cancelación. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. No
linkLabel Se utiliza para sustituir la etiqueta del botón en el que los usuarios pueden hacer clic para llamar al cuadro de diálogo de autenticación. La etiqueta predeterminada es Log In. No
prompt Cadena que se utiliza para solicitar al usuario que inicie sesión.
showCancelOption (Opcional) Permite especificar si se debe mostrar o no el botón Cancelar. Por defecto, esta opción se establece en true, lo que significa que se muestra el botón Cancelar. En algunos casos, como en el caso de canales SMS, puede que no quiera que este botón se muestre. Puede configurar este comportamiento con una expresión como:
${(system.message.channelConversation.channelType=='twilio')?then('false','true')}
translate Utilice esta propiedad booleana opcional para sustituir el valor booleano de la variable de contexto autoTranslate. Tenga en cuenta que autoTranslate se establece en false (excluir de la traducción automática) salvo si la variable de contexto se ha definido explícitamente en true. No
variable Especifica la variable en la que se va a almacenar el código de autorización. Puede declararla en el nodo context como variable, cadena u otro tipo de variable soportado. También puede ser una variable de usuario.

Este componente puede devolver las siguientes acciones:

Acción Descripción
fail El usuario ha hecho clic en el botón Cancelar.
pass El código de autorización se ha recuperado correctamente.
textReceived El usuario introdujo texto, en lugar de hacer clic en el botón Cancelar o autenticarse correctamente.

En este ejemplo, se muestran las propiedades necesarias que debe definir para el componente System.OAuthAccountLink: prompt, que especifica el mensaje de conexión, variable, que indica el componente donde se almacena el código de autorización y authorizeURL, que define tanto el URL de OAuth del proveedor como el URL de redirección que recibe el código de autorización.

login:
  component: "System.OAuthAccountLink"
  properties:
    prompt: "Please login now."
    linkLabel: "login"
    cancelLabel: "cancel"
    authorizeURL: "https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=75k0vq4&scope=r_basicprofile&redirect_uri=https%3A%2F%2FmyBotsinstance%2Fconnectors%2Fv2%2Fcallback"
    variable: "authCode"
  transitions:
      next: getBankUserProfile
      actions:
        textReceived: handleAuthTextResponse
        fail: authCancelled

Cuando el motor de diálogo encuentra este componente, el bot de aptitud solicita al usuario dos enlaces: Conexión y Cancelar.

Hay varias formas de realizar la transición desde este componente:

  • El usuario hace clic en el botón Cancelar y el componente pasa al estado que especifica la acción fail.

  • El usuario no hace clic en ningún botón, sino que introduce texto en su lugar. El componente pasa al estado especificado por la acción textReceived.

  • El usuario hace clic en el enlace de conexión y el canal representa la página de conexión del proveedor de identidad o el cuadro de diálogo de autenticación en forma de vista web, como se muestra en el siguiente ejemplo. Tras una autorización correcta, el componente pasa al estado especificado por la acción pass (o al siguiente estado si no hay una acción pass), que normalmente llamaría a un componente personalizado que intercambia el código de autorización por un token de acceso.

Si la ventana de prueba no representa la vista web, corte y pegue el texto del enlace en el explorador.

Propiedad authorizeURL

Para configurar esta propiedad, debe comenzar con la dirección URL del proveedor de identidad, como https://www.linkedin.com/oauth/v2/authorization en el ejemplo. A continuación, agregue los siguientes parámetros de OAuth a este URL:

  1. response_type: defínalo en code, ya que el bot de aptitud espera un código de autorización.

  2. client_id: valor de clave de API obtenido al registrar la aplicación con el proveedor de identidad.

  3. scope: lista de permisos para acceder a los recursos en nombre del usuario. Estos son los permisos que se definen al registrar la aplicación con el proveedor. Pueden variar según el proveedor: en LinkedIn, entre ellos se incluyen r_basicprofile (mostrado en el ejemplo) y r_emailadress; para Microsoft, se definen mediante openid email y openid profile.

  4. redirect_uri: URI de redirección utilizado para registrar la aplicación con el proveedor de identidad, indica al proveedor dónde redireccionar a los usuarios. Este parámetro, que es el nombre de host de servicio de Digital Assistant con connectors/v2/callback agregado, es el punto final que recibe el código de autorización y que, a continuación, lo asocia al canal activo. La propiedad redirect_uri se basa en el URL del webhook que se genera al crear un canal. Consulte Definición de canales

    Asegúrese de que el valor especificado para redirect_uri coincida con el URI de redirección proporcionado al registrar la aplicación. En ambos casos, al URI se le debe agregar al final connectors/v2/callback.

Nota

Si la instancia está aprovisionada en Oracle Cloud Platform (como ocurre con todas las instancias de la versión 19.4.1), utilice v1 en lugar de v2.