Introduction
Administrateurs système et ingénieurs cloud travaillant avec Microsoft 365, il est important de comprendre comment gérer les interactions entre utilisateurs internes et externes via Microsoft Teams. Cet article examine l'API removeAllAccessForUser dans Microsoft Graph, censée supprimer les accès à un chat pour un utilisateur—mais présente des limitations perturbantes.
Attention
L'API removeAllAccessForUser peut être trompeuse. Elle ne bloque pas l'accès à un chat externe mais supprime uniquement la visibilité des messages existants pour un utilisateur dans un tenant spécifique.
Identifier un Chat Externe
Pour manipuler efficacement un chat externe, trois informations sont nécessaires :
- Identifiant du chat : Uniquement accessible via
Get-MgUserChaten mode application avec la permissionChat.Read.All. - Identifiant utilisateur : Disponible grâce à la commande
Get-MgUser. - Identifiant tenant : Obtenable via
Get-MgOrganization.
Voici un exemple PowerShell pour identifier les chats externes :
1$tenantId = (Get-MgOrganization).Id2$Chats = Get-MgUserChat -UserId $UserId -all -Filter "tenantid ne '$tenantId'"3$Chats | Format-Table Id, CreatedDateTime4 5# Exemple de sortie6Id CreatedDateTime7-- ---------------819:chat-exemple_1@unq.gbl.spaces 29/04/2026 16:15:21919:chat-exemple_2@unq.gbl.spaces 10/01/2025 16:32:491 2## Rechercher des Chats Externes dans les Journaux d'Audit3 4Une autre méthode pour identifier des chats externes est de rechercher des événements pertinents dans les journaux d'audit Microsoft Teams :5 6```powershell7$StartDate = (Get-Date).AddDays(-60)8$EndDate = Get-Date9[array]$Domains = Get-AcceptedDomain | Select-Object -ExpandProperty DomainName10$Records = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -Operations "MemberAdded" -RecordType "MicrosoftTeams"11 12ForEach ($Rec in $Records) {13 $AuditData = $Rec.AuditData | ConvertFrom-Json14 If ($AuditData.CommunicationType -eq "OneOnOne") {15 $ForeignDomain = $AuditData.ParticipantInfo.ParticipatingDomains | Where-Object {$_ -notin $Domains}16 $ForeignTenantId = $AuditData.ParticipantInfo.ParticipatingTenantIds | Where-Object {$_ -ne $AuditData.OrganizationId}17 $ReportLine = [PSCustomObject][Ordered]@{18 TimeStamp = Get-Date ($AuditData.CreationTime) -format 'dd-MMM-yyyy HH:mm'19 ChatThreadId = $AuditData.ChatThreadId20 ForeignDomain = $ForeignDomain21 }22 Write-Host $ReportLine23 }24}Bon à savoir
Le filtrage des journaux d'audit facilite la liste des chats externes. Cela est utile pour cibler des interactions douteuses à analyser ou à supprimer.
Supprimer l'Accès de l'Utilisateur à un Chat Externe
Une fois le chat identifié, utilisez la commande Remove-MgChatAccessForUser ou son équivalent via Graph API. Voici les étapes :
Configuration des variables
Définissez les métadonnées utilisateur et tenant dans un tableau associatif :
1$UserInfo = @{}2$UserData = @{}3$UserData.Add("id", $UserId)4$UserData.Add("tenantId", $TenantId)5$UserInfo.Add("user", $UserData)Utiliser PowerShell ou Graph API
Option 1 : Utiliser PowerShell directement :
1Remove-MgChatAccessForUser -ChatId $ChatId -BodyParameter $UserInfo -ErrorAction StopOption 2 : Créer une requête API manuelle :
1$Uri = "https://graph.microsoft.com/V1.0/chats/$ChatId/removeAllAccessForUser"2Invoke-MgGraphRequest -Method POST -Uri $Uri -Body $UserInfoLimitations Connues
- L'API supprime uniquement la visibilité des messages avant le moment de la commande.
- Les chats externes restent actifs, permettant des échanges futurs.

Important
La suppression ne rend pas le chat inactif. Les utilisateurs externes conservent l'accès total.
Recommandations
Afin de mieux contrôler les interactions, les administrateurs devraient :
- Configurer une « Allow List » pour limiter les tenants autorisés à collaborer via Teams.
- Auditer régulièrement les journaux pour détecter des activités suspectes.
- Sensibiliser les utilisateurs aux risques des interactions externes.
Vous pouvez en apprendre davantage sur l'utilisation de Microsoft Graph API dans la documentation officielle de Microsoft Graph : https://learn.microsoft.com/graph/api/resources/chats.

Conclusion
Bien que l'API removeAllAccessForUser semble utile en théorie, elle offre une portée limitée dans les scénarios critiques de réponse aux incidents. Comprendre ces limites est essentiel pour gérer efficacement les collaborations externes.


