Agregar inicio de sesión único
En esta unidad, aprenderá a agregar el inicio de sesión único a una extensión de mensaje mediante Microsoft Entra.
Configuración de la aplicación Teams con inicio de sesión único
La aplicación Microsoft Teams admite el inicio de sesión único (SSO) mediante Microsoft Entra. Sso permite a los usuarios iniciar sesión una vez y acceder a varias aplicaciones sin tener que volver a iniciar sesión.
Para configurar el inicio de sesión único, configure el registro de la aplicación Microsoft Entra del recurso de Bot de Azure para realizar solicitudes en nombre del usuario.
En el registro de la aplicación Microsoft Entra, se configuran los siguientes valores:
- URI del identificador de aplicación, un identificador único para el registro de la aplicación que se usa para identificar el recurso que el cliente debe usar al iniciar un flujo de inicio de sesión único en la aplicación.
- Ámbitos, el permiso concedido al bot para acceder a los datos del usuario.
- Aplicaciones cliente autorizadas, las aplicaciones cliente a las que se permite solicitar tokens del registro de aplicaciones.
En el manifiesto de la aplicación, el objeto webApplicationInfo se configura con el identificador del bot y el URI del identificador de aplicación. Determinan el recurso que el cliente debe usar al iniciar un flujo de inicio de sesión único en la aplicación.
El siguiente fragmento de código muestra cómo se configura el objeto webApplicationInfo en el archivo de manifiesto de la aplicación:
"webApplicationInfo": {
"id": "dbeb8ea7-8ac3-4bb2-bcba-b210b087a73a",
"resource": "api://grttxrk0-5130.uks1.devtunnels.ms/botid-dbeb8ea7-8ac3-4bb2-bcba-b210b087a73a"
}
Configuración de la conexión de OAuth
El recurso bot de Azure proporciona acceso a Bot Framework Token Service. El servicio de token se usa para obtener un token de acceso para el usuario mediante la configuración de conexión de OAuth que configure. Los tokens se almacenan de forma segura en el servicio y se recuperan cuando es necesario en el código del bot.
Para crear una configuración de conexión, configure los siguientes valores:
- Nombre : nombre de la configuración de conexión.
- Proveedor de servicios : el proveedor de identidades que la conexión usa para autenticar a los usuarios. La configuración de conexión admite varios proveedores de identidades, incluido Microsoft Entra.
- Id. de cliente : el identificador de cliente de un registro de aplicación de Microsoft Entra configurado con los permisos necesarios para acceder a los datos de usuario.
- Secreto de cliente: el secreto de cliente de un registro de aplicación de Microsoft Entra configurado con los permisos necesarios para acceder a los datos de usuario.
- Dirección URL de Intercambio de tokens : la dirección URL que el cliente debe usar al iniciar un flujo de inicio de sesión único en la aplicación.
- Id . de inquilino: el identificador de inquilino donde se encuentra el registro de la aplicación Microsoft Entra.
- Ámbitos : el permiso concedido al bot para acceder a los datos del usuario.
El siguiente fragmento de código muestra cómo configurar una configuración de conexión de OAuth en un archivo bicep:
resource botServiceProductsAPIConnection 'Microsoft.BotService/botServices/connections@2022-09-15' = {
parent: botService
name: 'Products API'
location: 'global'
properties: {
serviceProviderDisplayName: 'Azure Active Directory v2'
serviceProviderId: '30dd229c-58e3-4a48-bdfd-91ec48eb906c'
clientId: productsApiEntraAppClientId
clientSecret: productsApiEntraAppClientSecret
scopes: 'api://${backendApiEntraAppClientId}/Product.Read'
parameters: [
{
key: 'tenantID'
value: 'common'
}
{
key: 'tokenExchangeUrl'
value: 'api://${botAppDomain}/botid-${botEntraAppClientId}'
}
]
}
}
Sugerencia
Se recomienda crear nuevos registros de aplicaciones de Microsoft Entra para la autenticación de usuario a servicio. El registro de aplicaciones que se usa con Azure Bot Service debe permanecer independiente y usarse para la autenticación de servicio a servicio entre el servicio web y el servicio de bot.
El registro de la aplicación Microsoft Entra que se usa con la configuración de conexión debe configurarse para usar el URI https://token.botframework.com/.auth/web/redirect
de redireccionamiento para obtener correctamente un token de acceso de Bot Framework Token Service. El URI de redireccionamiento se usa para devolver el token de acceso al servicio de token después de que el usuario se autentique.
Como el URI de redireccionamiento del servicio de token se hospeda en un dominio externo, debe incluirse en el archivo de manifiesto de la aplicación. La matriz validDomains indica al cliente qué dominios va a usar la aplicación. Garantiza que el cliente pueda confiar en el dominio al iniciar un flujo de inicio de sesión único.
El siguiente fragmento de código muestra cómo agregar el dominio al archivo de manifiesto de la aplicación:
"validDomains": [
"token.botframework.com"
]
Autenticación de consultas de usuario
Para autenticar consultas de usuario en una extensión de mensaje, use bot framework SDK para obtener un token de acceso para el usuario desde Bot Framework Token Service. A continuación, el token de acceso se puede usar para acceder a los datos desde un servicio externo.
En primer lugar, compruebe si existe un token para el usuario en el servicio de token.
El siguiente fragmento de código muestra cómo obtener UserTokenClient y usar el método GetUserTokenAsync para devolver un token de acceso para el usuario mediante una configuración de conexión de OAuth con nombre:
var userTokenClient = turnContext.TurnState.Get<UserTokenClient>();
var tokenResponse = await userTokenClient.GetUserTokenAsync(userId, connectionName, channelId, magicCode, cancellationToken);
Si no se devuelve un token, debe pedir al usuario que inicie sesión. Cree una respuesta que represente un vínculo en la interfaz de usuario, que el usuario puede seguir para iniciar el flujo de inicio de sesión.
El siguiente fragmento de código muestra cómo se usa el método GetSignInResourceAsync para devolver un vínculo de inicio de sesión desde el servicio de token e incluirlo en la respuesta de la extensión de mensaje:
var resource = await userTokenClient.GetSignInResourceAsync(connectionName, activity, null, cancellationToken);
return new MessagingExtensionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "auth",
SuggestedActions = new MessagingExtensionSuggestedAction
{
Actions = [
new() {
Type = ActionTypes.OpenUrl,
Value = resource.SignInLink,
Title = "Sign In",
},
],
},
},
};
Cuando el usuario sigue el vínculo de inicio de sesión, da su consentimiento a los permisos solicitados en el campo Ámbitos de la configuración de conexión de OAuth. Una vez que el usuario da su consentimiento a los permisos, el servicio de token obtiene un token de acceso y lo almacena de forma segura en el servicio.
La próxima vez que el usuario inicie una búsqueda en la extensión de mensaje, se encontrará un token de acceso en el servicio de token. El token de acceso devuelto se puede usar para acceder a datos desde un servicio externo.