Ajouter l’authentification unique
Dans cette unité, vous allez apprendre à ajouter l’authentification unique à une extension de message à l’aide de Microsoft Entra.
Configurer l’application Teams avec l’authentification unique
L’application Microsoft Teams prend en charge l’authentification unique (SSO) à l’aide de Microsoft Entra. L’authentification unique permet aux utilisateurs de se connecter une fois et d’accéder à plusieurs applications sans avoir à se reconnecter.
Pour configurer l’authentification unique, vous configurez l’inscription de l’application Microsoft Entra de la ressource Azure Bot pour effectuer des demandes au nom de l’utilisateur.
Lors de l’inscription de l’application Microsoft Entra, vous configurez les paramètres suivants :
- URI d’ID d’application, identificateur unique pour l’inscription de l’application qui est utilisé pour identifier la ressource que le client doit utiliser lors du lancement d’un flux d’authentification unique dans l’application.
- Étendues, l’autorisation accordée à votre bot pour accéder aux données utilisateur.
- Les applications clientes autorisées, c’est-à-dire les applications clientes autorisées à demander des jetons à partir de l’inscription de l’application.
Dans le manifeste de l’application, l’objet webApplicationInfo est configuré avec l’ID du bot et l’URI de l’ID d’application. Ils déterminent la ressource que le client doit utiliser lors du lancement d’un flux d’authentification unique dans l’application.
L’extrait de code suivant montre comment l’objet webApplicationInfo est configuré dans le fichier manifeste de l’application :
"webApplicationInfo": {
"id": "dbeb8ea7-8ac3-4bb2-bcba-b210b087a73a",
"resource": "api://grttxrk0-5130.uks1.devtunnels.ms/botid-dbeb8ea7-8ac3-4bb2-bcba-b210b087a73a"
}
Configurer la connexion OAuth
La ressource Azure Bot fournit l’accès au service d’émission de jetons Bot Framework. Le service de jeton est utilisé pour obtenir un jeton d’accès pour l’utilisateur à l’aide des paramètres de connexion OAuth que vous configurez. Les jetons sont stockés en toute sécurité dans le service et sont récupérés si nécessaire dans le code du bot.
Pour créer un paramètre de connexion, vous configurez les paramètres suivants :
- Name : nom du paramètre de connexion.
- Fournisseur de services : fournisseur d’identité utilisé par la connexion pour authentifier les utilisateurs. Les paramètres de connexion prennent en charge plusieurs fournisseurs d’identité, notamment Microsoft Entra.
- ID client : ID client d’une inscription d’application Microsoft Entra configurée avec les autorisations requises pour accéder aux données utilisateur.
- Clé secrète client : clé secrète client d’une inscription d’application Microsoft Entra configurée avec les autorisations requises pour accéder aux données utilisateur.
- URL d’échange de jetons : URL que le client doit utiliser lors de l’initialisation d’un flux d’authentification unique dans l’application.
- ID de locataire : ID de locataire où se trouve l’inscription de l’application Microsoft Entra.
- Étendues : autorisation accordée à votre bot pour accéder aux données utilisateur.
L’extrait de code suivant montre comment configurer un paramètre de connexion OAuth dans un fichier 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}'
}
]
}
}
Conseil
Il est recommandé de créer des inscriptions d’applications Microsoft Entra pour l’authentification de l’utilisateur au service. L’inscription d’application utilisée avec le service Bot Azure doit rester distincte et utilisée pour l’authentification de service à service entre le service web et le service bot.
L’inscription de l’application Microsoft Entra utilisée avec le paramètre de connexion doit être configurée pour utiliser l’URI https://token.botframework.com/.auth/web/redirect
de redirection afin d’obtenir un jeton d’accès auprès du service Bot Framework Token. L’URI de redirection est utilisé pour retourner le jeton d’accès au service de jeton après l’authentification de l’utilisateur.
Comme l’URI de redirection du service de jeton est hébergé sur un domaine externe, il doit être inclus dans le fichier manifeste de l’application. Le tableau validDomains indique au client les domaines à utiliser par l’application. Il garantit que le client peut approuver le domaine lors de l’initialisation d’un flux d’authentification unique.
L’extrait de code suivant montre comment ajouter le domaine au fichier manifeste de l’application :
"validDomains": [
"token.botframework.com"
]
Authentifier les requêtes utilisateur
Pour authentifier les requêtes utilisateur dans une extension de message, vous utilisez le Kit de développement logiciel (SDK) Bot Framework afin d’obtenir un jeton d’accès pour l’utilisateur à partir du service d’émission de jetons Bot Framework. Le jeton d’accès peut ensuite être utilisé pour accéder aux données à partir d’un service externe.
Tout d’abord, vous vérifiez si un jeton existe pour l’utilisateur dans le service de jeton.
L’extrait de code suivant montre comment obtenir UserTokenClient et utiliser la méthode GetUserTokenAsync pour retourner un jeton d’accès pour l’utilisateur à l’aide d’un paramètre de connexion OAuth nommé :
var userTokenClient = turnContext.TurnState.Get<UserTokenClient>();
var tokenResponse = await userTokenClient.GetUserTokenAsync(userId, connectionName, channelId, magicCode, cancellationToken);
Si aucun jeton n’est retourné, vous devez demander à l’utilisateur de se connecter. Créez une réponse qui affiche un lien dans l’interface utilisateur, que l’utilisateur peut suivre pour démarrer le flux de connexion.
L’extrait de code suivant montre comment la méthode GetSignInResourceAsync est utilisée pour retourner un lien de connexion à partir du service de jeton et l’inclure dans la réponse d’extension de message :
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",
},
],
},
},
};
Lorsque l’utilisateur suit le lien de connexion, il consent aux autorisations demandées dans le champ Étendues du paramètre de connexion OAuth. Une fois que l’utilisateur a accepté les autorisations, le service de jeton obtient un jeton d’accès et le stocke en toute sécurité dans le service.
La prochaine fois que l’utilisateur lancera une recherche dans l’extension de message, un jeton d’accès sera trouvé dans le service de jeton. Le jeton d’accès retourné peut être utilisé pour accéder aux données à partir d’un service externe.