Copilot Studio admite el inicio de sesión único (SSO). SSO permite a los agentes de su sitio web registrar a los clientes si ya han iniciado sesión en la página o aplicación donde se implementa el agente.
Por ejemplo, el agente está hospedado en la intranet corporativa o en una aplicación en la que el usuario ya ha iniciado sesión.
Hay cinco pasos principales para configurar el inicio de sesión único para Copilot Studio:
Habilitación de la autenticación manual para el agente con Microsoft Entra ID
Registre una aplicación en Microsoft Entra ID para su lienzo personalizado.
Defina un ámbito personalizado para el agente en Microsoft Entra ID.
Agregue el ámbito personalizado a la configuración del agente.
Configure el código de cliente del lienzo personalizado para habilitar el inicio de sesión único (SSO).
Requisitos previos
- Habilitar la autenticación de usuario con Microsoft Entra ID
- Agregar un tema de autenticación al agente
- Usar un lienzo personalizado
Nota
Para configurar SSO utilizando otros proveedores de OAuth 2.0, consulte Configurar el inicio de sesión único con proveedores de OAuth genéricos.
Canales compatibles
La siguiente tabla detalla los canales que actualmente admiten SSO. Puede sugerir compatibilidad con canales adicionales en el foro de ideas de Copilot Studio.
| Canal |
Soportado |
|
Canales de Azure Bot Service |
No es compatible |
| Sitio web personalizado |
Soportado |
| Sitio web de demostración |
No es compatible |
| Facebook |
No es compatible |
|
Microsoft Teams1 |
Soportado |
| Aplicación móvil |
No es compatible |
| Omnicanalidad para servicio al cliente2 |
Soportado |
|
SharePoint1 |
Soportado |
1 Si también tiene habilitado el canal de Teams, debe seguir las instrucciones de configuración de la Configurar inicio de sesión único con Microsoft Entra ID para agentes en Microsoft Teams documentación. Si no configura los ajustes de SSO de Teams como se indica en esa página, sus usuarios siempre fallarán en la autenticación al usar el canal de Teams.
2 Solo se admite el canal de chat en vivo. Para obtener más información, vea Configurar la transferencia a Dynamics 365 Customer Service.
Importante
Actualmente, no se admite el inicio de sesión único cuando un agente se publica en un portal de Power Apps.
Crear registros de aplicación para el sitio web personalizado
Para habilitar SSO, necesitará crear dos registros de aplicaciones separados:
- Un registro de la aplicación de autenticación, que habilita la autenticación de usuario de Microsoft Entra ID para su agente
- Un registro de aplicación de canvas que habilita el inicio de sesión único (SSO) para su página web personalizada
Por razones de seguridad, no se recomienda volver a utilizar el mismo registro de aplicación para el agente y su sitio web personalizado.
Siga las instrucciones de Configurar la autenticación de usuario con Microsoft Entra ID para crear un registro de aplicaciones de autenticación.
Cree un segundo registro de aplicación para que sirva como el registro de su aplicación canvas.
Agregar URL de intercambio de token
Para actualizar la configuración de autenticación de Microsoft Entra ID en Copilot Studio, debe agregar la dirección URL de intercambio de tokens para permitir que la aplicación y Copilot Studio compartan información.
En el portal de Azure en la página de registro de la aplicación de autenticación, vaya a Exponga una API.
En Ámbitos, seleccione el icono Copiar al portapapeles.
En Copilot Studio, en el menú de navegación de Settings, seleccione Security y, a continuación, seleccione el icono Authentication.
Para la URL de intercambio de tokens (obligatoria para SSO), pegue el ámbito que copió anteriormente.
Haga clic en Guardar.
En el portal de Azure en la página de registro de la aplicación de autenticación, vaya a Overview.
Copie el valor de Id. de aplicación (cliente) en Elementos esenciales.
En la barra de navegación, seleccione Administrarexponer una API.
En Aplicaciones cliente autorizadas, seleccione Agregar una aplicación cliente y, a continuación, pegue el id. de cliente copiado.
Haga clic en Guardar.
Una vez que haya creado el registro de su aplicación de lienzo, vaya a Autenticación y luego seleccione Añadir una plataforma.
Debajo de Configuraciones de plataforma, seleccione Agregar una plataforma, luego seleccione SPA.
En URI de redireccionamiento, introduzca la URL de su página web; por ejemplo, .
Captura de pantalla de la página Configurar Web.
En la sección Concesión implícita y flujos híbridos, active tanto los Tokens de acceso (utilizados para flujos implícitos) como los Tokens de ID (utilizados para flujos implícitos e híbridos).
Seleccione Configurar.
Buscar la URL del punto de conexión del token del agente
En Copilot Studio, abra el agente y seleccione Channels.
Seleccione Aplicación móvil.
En el punto de acceso de token, seleccione Copiar.
Configurar SSO en su página web
Importante
Las respuestas generadas por ia de los orígenes de datos de SharePoint y Graph Connector no están disponibles para los usuarios invitados en aplicaciones habilitadas para SSO.
Use el código proporcionado en el repositorio Copilot Studio GitHub para crear una página web para la dirección URL de redireccionamiento. Copie el código del repositorio de GitHub y modifíquelo mediante las instrucciones siguientes.
Vaya a la página Overview en Azure portal y copie el Application (client) ID y el Directory (tenant) ID desde el registro de la aplicación canvas.
Para configurar el Biblioteca de autenticación de Microsoft (MSAL):
- Asigne a su identificador de aplicación (cliente).
- Asigne a y agregue su Id. de directorio (inquilino) al final.
Por ejemplo:
var clientApplication;
(function (){
var msalConfig = {
auth: {
clientId: '00001111-aaaa-2222-bbbb-3333cccc4444',
authority: 'https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
},
Establezca la variable en la URL del punto de conexión del token que copió anteriormente. Por ejemplo:
(async function main() {
var theURL = "https://<token endpoint URL>"
Edite el valor de para incluir un prefijo personalizado. Por ejemplo:
var userId = clientApplication.account?.accountIdentifier != null ?
("My-custom-prefix" + clientApplication.account.accountIdentifier).substr(0, 64)
: (Math.random().toString() + Date.now().toString()).substr(0,64);
Guarda los cambios.
Compruebe que ha configurado correctamente el SSO.
Al probar su agente, si SSO no está configurado correctamente, se le pedirá que inicie sesión, lo que le brinda un código de validación que debe copiar en la ventana de chat.
Si ve un mensaje de inicio de sesión, verifique que completó correctamente los pasos 1 a 5 de este procedimiento. Si el SSO se configura correctamente, no se le solicitará que inicie sesión.
Nota
El código del repositorio de GitHub requiere que los usuarios seleccionen el botón de inicio de sesión. En producción, es posible que quiera reemplazar la funcionalidad del botón por un evento más adecuado, como navegar a una página.
Contenido relacionado
Descripción técnica
En la ilustración siguiente se muestra cómo un usuario ha iniciado sesión sin ver un símbolo del sistema de inicio de sesión (SSO) en Copilot Studio:
Ilustración del flujo de autenticación de SSO.
El usuario del agente introduce una frase que activa un tema de inicio de sesión. El tema de inicio de sesión está diseñado para iniciar sesión y usar el token autenticado (variable ).
Copilot Studio envía un mensaje de inicio de sesión para permitir que el usuario inicie sesión con su proveedor de identidades configurado.
El lienzo personalizado del agente intercepta el mensaje de inicio de sesión y solicita un token en nombre (OBO) de Microsoft Entra ID. El lienzo envía el token al agente.
Al recibir el token OBO, el agente intercambia el token OBO por un "token de acceso" y completa la variable usando el valor del token de acceso. Las variables también se establecen en este momento.
Crear un registro de aplicación en Microsoft Entra ID para tu lienzo personalizado
Para habilitar SSO, necesitará dos registros de aplicaciones separados:
Importante
No puede reutilizar el mismo registro de aplicación para la autenticación de usuario de su agente y su lienzo personalizado.
Crear un registro de aplicación para el lienzo del agente
Inicie sesión en el portal Azure.
Vaya a Registros de aplicaciones, seleccione el icono o busque en la barra de búsqueda superior.
Seleccione Nuevo registro.
Captura de pantalla de la página de registro de la aplicación con el botón Nuevo registro resaltado.
Escriba un nombre para el registro. Puede ser útil usar el nombre del agente cuyo lienzo está registrando e incluir "lienzo" para ayudar a separarlo del registro de la aplicación para la autenticación.
Por ejemplo, si su agente se llama "Contoso Ayuda de Ventas", puede registrar la aplicación como "ContosoSalesCanvas" o algo similar.
En Tipos de cuenta compatibles, seleccione Cuentas en cualquier inquilino de la organización (Cualquier directorio de Microsoft Entra ID - multiinquilino) y cuentas Microsoft personales (por ejemplo, Skype, Xbox).
Deja la sección URI de redireccionamiento en blanco por ahora, ya que introducirás esa información en los siguientes pasos. Seleccione Registrar.
Captura de pantalla en la que se muestra el formulario de registro.
Una vez completado el registro, se abrirá en la página Visión general. Vaya a Manifiesto. Confirme que está configurado en . Si no es así, cámbielo a y luego seleccione Guardar.
Agregar la URL de redireccionamiento
Con el registro abierto, vaya a Autenticación y luego seleccione Agregar una plataforma.
Captura de pantalla que muestra Agregar una plataforma en Autenticación.
En la hoja Configurar plataformas, seleccione Web.
Captura de pantalla que muestra la ventana web resaltada.
En Redirigir URI, agregue la dirección URL completa a la página donde está hospedado su lienzo de chat. En la sección Concesión Implícita, seleccione las casillas ID Tokens y Access Tokens.
Seleccione Configurar para confirmar los cambios.
Captura de pantalla en la que se muestra el formulario de URL de redireccionamiento.
Vaya a Permisos de API. Seleccione Otorgar consentimiento de administrador para su nombre de inquilino y después Sí.
Importante
Para evitar que los usuarios tengan que dar su consentimiento a cada aplicación, alguien asignado con al menos el rol de Administrador de aplicaciones o el de Administrador de aplicaciones en la nube puede otorgar el consentimiento a nivel del inquilino para los registros de sus aplicaciones.
Captura de pantalla que resalta el botón Conceder consentimiento del administrador para el inquilino.
Definir un ámbito personalizado para su agente
Defina un ámbito personalizado al exponer una API para el registro de la aplicación de canvas dentro del registro de la aplicación de autenticación. Los ámbitos permiten determinar los roles de usuario y de administrador, así como los derechos de acceso.
Este paso crea una relación de confianza entre el registro de la aplicación de autenticación para la autenticación y el registro de la aplicación para su lienzo personalizado.
Abra el registro de la aplicación que creó cuando configuró la autenticación.
Vaya a Permisos de la API y asegúrese de que se agreguen los permisos correctos para su agente. Seleccione Otorgar consentimiento de administrador para su nombre de inquilino y después Sí.
Importante
Para evitar que los usuarios tengan que dar su consentimiento a cada aplicación, alguien asignado con al menos el rol de Administrador de aplicaciones o el de Administrador de aplicaciones en la nube puede otorgar el consentimiento a nivel del inquilino para los registros de sus aplicaciones.
Vaya a Exponer una API y seleccione Agregar un ámbito.
Captura de pantalla que muestra Exponer una API y después agregar un ámbito.
Escriba un nombre para el ámbito, junto con la información de visualización que se debe mostrar a los usuarios cuando accedan a la pantalla de SSO. Selecciona la opción Agregar un ámbito.
Captura de pantalla que muestra la página Agregar ámbito.
Seleccione Agregar una aplicación cliente.
Ingrese el ID de aplicación (cliente) desde la página de Descripción general para el registro de la aplicación de tipo lienzo en el campo ID del cliente. Seleccione la casilla de verificación para el ámbito enumerado que creó.
Seleccione Agregar una aplicación.
La URL de Token Exchange en la página de configuración de autenticación de Copilot Studio se utiliza para intercambiar el "token de OBO" por el token de acceso solicitado a través del framework de bots.
Copilot Studio llama a Microsoft Entra ID para efectuar el intercambio real.
Inicie sesión en Copilot Studio.
Confirme que ha seleccionado el agente para el que desea habilitar la autenticación seleccionando el icono del agente en el menú superior y eligiendo el agente correcto.
En el menú de navegación, en Configuración, seleccione Seguridad. A continuación, seleccione la tarjeta Autenticación.
Ir a Administrar y después a Autenticación.
Ingrese el URI de alcance completo de la página Exponer una API para el registro de la aplicación de autenticación del agente en el campo URL de intercambio de tokens. La URI tiene el formato de .
Captura de pantalla que resalta la API del ámbito.
Captura de pantalla que muestra la pestaña de autenticación con la ubicación de la API.
Seleccione Guardar y luego publique el contenido del agente.
Actualice la página de interfaz personalizada donde se encuentra el agente para capturar la petición de la tarjeta de inicio de sesión e intercambiar el token OBO.
Configure el Biblioteca de autenticación de Microsoft (MSAL) agregando el código siguiente en una sección <script> en la sección <head>.
Actualice el ID de la aplicación (cliente) para el registro de la aplicación de lienzo. Reemplace por el ID de directorio (tenant). Obtendrá estos identificadores en la página de Overview para el registro de la aplicación canvas.
<head>
<script>
var clientApplication;
(function () {
var msalConfig = {
auth: {
clientId: '<Client ID [CanvasClientId]>',
authority: 'https://login.microsoftonline.com/<Directory ID>'
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false
}
};
if (!clientApplication) {
clientApplication = new Msal.UserAgentApplication(msalConfig);
}
} ());
</script>
</head>
Inserte el siguiente script en la sección cuerpo. Este script llama a un método para recuperar e intercambiar su token actual por un token solicitado por el mensaje de OAuth.
<script>
function getOAuthCardResourceUri(activity) {
if (activity &&
activity.attachments &&
activity.attachments[0] &&
activity.attachments[0].contentType === 'application/vnd.microsoft.card.oauth' &&
activity.attachments[0].content.tokenExchangeResource) {
// asking for token exchange with Microsoft Entra ID
return activity.attachments[0].content.tokenExchangeResource.uri;
}
}
function exchangeTokenAsync(resourceUri) {
let user = clientApplication.getAccount();
if (user) {
let requestObj = {
scopes: [resourceUri]
};
return clientApplication.acquireTokenSilent(requestObj)
.then(function (tokenResponse) {
return tokenResponse.accessToken;
})
.catch(function (error) {
console.log(error);
});
}
else {
return Promise.resolve(null);
}
}
</script>
Inserte el siguiente script en la sección cuerpo. Dentro del método , este código agrega una condición a su , con el identificador único de su agente. También genera un ID único como tu variable.
Actualice con el ID de su agente. Para ver el identificador del agente en Copilot Studio, vaya a la página Channels del agente y seleccione Aplicación móvil.
<script>
(async function main() {
// Add your BOT ID below
var BOT_ID = "<BOT ID>";
var theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
const {
token
} = await fetchJSON(theURL);
var directline = await fetchJSON(regionalChannelSettingsURL).then(res=> res.channelUrlsById.directline);
const directLine = window.WebChat.createDirectLine({
domain: `${directline}v3/directline`,
token
});
var userID = clientApplication.account?.accountIdentifier != null ?
("Your-customized-prefix-max-20-characters" + clientApplication.account.accountIdentifier).substr(0, 64) :
(Math.random().toString() + Date.now().toString()).substr(0, 64); // Make sure this will not exceed 64 characters
const store = WebChat.createStore({}, ({
dispatch
}) => next => action => {
const {
type
} = action;
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'startConversation',
type: 'event',
value: {
text: "hello"
}
}
});
return next(action);
}
if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
const activity = action.payload.activity;
let resourceUri;
if (activity.from && activity.from.role === 'bot' &&
(resourceUri = getOAuthCardResourceUri(activity))) {
exchangeTokenAsync(resourceUri).then(function(token) {
if (token) {
directLine.postActivity({
type: 'invoke',
name: 'signin/tokenExchange',
value: {
id: activity.attachments[0].content.tokenExchangeResource.id,
connectionName: activity.attachments[0].content.connectionName,
token,
},
"from": {
id: userID,
name: clientApplication.account.name,
role: "user"
}
}).subscribe(
id => {
if (id === 'retry') {
// The agent was not able to handle the invoke, so display the oauthCard
return next(action);
}
// else: tokenexchange successful and we do not display the oauthCard
},
error => {
// an error occurred to display the oauthCard
return next(action);
}
);
return;
} else
return next(action);
});
} else
return next(action);
} else
return next(action);
});
const styleOptions = {
// Add styleOptions to customize Web Chat canvas
hideUploadButton: true
};
window.WebChat.renderWebChat({
directLine: directLine,
store,
userID: userID,
styleOptions
},
document.getElementById('webchat')
);
})().catch(err => console.error("An error occurred: " + err));
</script>
Ejemplo completo de código
Para obtener más información, puede encontrar el código de ejemplo completo, con MSAL y los scripts de condición de almacenamiento ya incluidos en nuestro repositorio de GitHub.