Entfernen eines externen Chats aus der Ansicht eines Benutzers in Microsoft Teams (Administrator)
Als Mandantenadministrator können Sie die neue RemoveAllAccessForUser-Graph-API verwenden, um einen extern initiierten Chat aus der Benutzeransicht zu entfernen.
Microsoft Teams-Administratoren müssen möglicherweise Benutzerchats entfernen, die von Personen außerhalb Ihrer organization erstellt wurden. Beispielsweise hat einer Ihrer Benutzer eine Chatanfrage von einer Person außerhalb Ihres Unternehmens erhalten. Dieser Chat kann unangemessene oder böswillige Inhalte enthalten, und Als Administrator können Sie diesen Chat entfernen, um Ihren Benutzer zu schützen.
Um die RemoveAllAccessForUser-Graph-API verwenden zu können, müssen Sie drei Parameter angeben: tenantId, userId und chatsId/threadId. TenantId ist der eindeutige Bezeichner Ihres Teams-Mandanten. Die userId ist der eindeutige Bezeichner Ihres Benutzers, für den Sie den Chat entfernen möchten. ChatsId/threadId ist der eindeutige Bezeichner des Teams-Chatthreads, aus dem Sie Ihren Benutzer entfernen möchten.
Sie können diese drei Parameter aus den neuen UAL-Ereignissen (Unified Audit Log) abrufen, die generiert werden, wenn ein externer Benutzer mit einem Benutzer in Ihrem Mandanten kommuniziert. Die UAL-Ereignisse enthalten Informationen über den Absender, den Empfänger, den Chatthread und die Nachricht. Sie können die UAL-Ereignisse verwenden, um den Chatthread zu identifizieren, von dem Sie den Zugriff widerrufen möchten, und dann die tenantId, die userId und die chatsId/threadId aus den Ereignisdetails zu extrahieren.
Schritte zur Verwendung des RemoveAllAccessForUser-Graph-API
- Schritt 1: Suchen Sie nach den UAL-Ereignissen , die Ihren Kriterien entsprechen. Wenn Sie alle Ereignisse finden möchten, bei denen ein Benutzer einem Chat hinzugefügt wurde, können Sie das Ereignis "MemberAdded" in Ihrer Suchabfrage verwenden.
- Schritt 2: Extrahieren sie die tenantId, die userId und die chatsId/threadId aus den Details des UAL-Ereignisses.
- Schritt 3: Aufrufen des RemoveAllAccessForUser-Graph-API mit den gewünschten Parametern
Schritt 1: Suchen nach UAL-Ereignissen
Um nach bestimmten UAL-Ereignissen zu suchen, können Sie die Search-UnifiedAuditLog Graph-API verwenden, oder Sie können das Überwachungsprotokollsuchfeature im Microsoft Purview-Complianceportal verwenden. Die folgenden Anweisungen verwenden die Microsoft Purview-Complianceportal. Führen Sie die folgenden Schritte durch:
Melden Sie sich https://compliance.microsoft.com bei als Überwachungsprotokolladministrator an.
Wählen Sie im linken Navigationsbereich Überwachen aus.
Geben Sie auf der Seite Überwachungsprotokollsuche die folgenden Kriterien an:
- Wählen Sie auf der Seite Überwachung die Option Suchen aus.
- Aktivitäten: Wählen Sie im Feld Aktivitäten – Vorgangsnamen die Option MemberAdded (und optional MessageReceived) aus, und wählen Sie microsoftTeams für die Workload aus.
- Datumsbereich: Wählen Sie einen Datumsbereich aus, der den Zeitraum abdeckt, in dem der externe Benutzer mit dem Benutzer in Ihrem Mandanten kommuniziert hat. (optional) Benutzer: Geben Sie den UPN des Benutzers in Ihrem Mandanten ein, an dem Sie interessiert sind.
Wählen Sie Suchen aus. Mit diesem Befehl wird eine Suche in die Warteschlange eingereiht, um sie im Hintergrund auszuführen.
Überprüfen Sie nach Abschluss der Suche die Suchergebnisse, und identifizieren Sie die UAL-Ereignisse, die den Chat und den Benutzer betreffen, an dem Sie interessiert sind (Schritt 3 unten).
Schritt 2: Extrahieren sie die tenantId, die userId und die chatsId/threadId aus den Details des UAL-Ereignisses.
Um die tenantId, die userId und die chatsId/threadId aus den UAL-Ereignisdetails zu extrahieren, können Sie die Felder OrganizationId, UserKey und ChatThreadId des Ereignisses verwenden. Wenn Sie nach dem MemberAdded-Ereignis gesucht haben , werden möglicherweise Ereignisse angezeigt, bei denen Ihre Benutzer zu einem externen Chat hinzugefügt wurden und bei denen Ihre Benutzer einen externen Benutzer zu einem Chat hinzugefügt haben. Suchen Sie die Ereignisse, bei denen sich Ihr Benutzer in Ihrem Mandanten befindet, im Abschnitt Mitgliederdetails (gibt an, dass dies der Benutzer ist, der hinzugefügt wurde (siehe Abbildung 2 unten). Führen Sie hierzu folgende Schritte aus:
Wählen Sie eines der UAL-Ereignisse aus, die den externen Benutzer betreffen, für den Sie den Zugriff widerrufen möchten.
Gehen Sie im Bereich Ereignisdetails wie
- Kopieren Sie den Wert des Felds OrganizationId . Dieser Wert ist die tenantId Ihres Teams-Mandanten.
- Kopieren Sie den Wert des Felds UserKey . Dieser Wert ist die userID des Benutzers in Ihrem Mandanten, der dem Chat hinzugefügt wurde.
- Kopieren Sie den Wert des Felds ChatThreatId . Dieser Wert ist die chatsId/threadId des Teams-Chatthreads, zu dem die Nachricht gehört.
Sehen Sie sich den folgenden Screenshot mit einem Beispiel für ein Purview-Suchergebnisdetails an:
Abbildung 1 (Details zum UAL MemberAdded-Ereignis)
Abbildung 2 (Elementdetails aus memberadded UAL-Ereignis)
Schritt 3: Aufrufen des RemoveAllAccessForUser-Graph-API mit den gewünschten Parametern
Um die RemoveAllAccessForUser-Graph-API mit den Parametern aufzurufen, müssen Sie eine HTTP POST-Anforderung an die Graph-API verwenden:
POST https://graph.microsoft.com/beta/chats/{chatsId}/removeAllAccessForUser
Ersetzen Sie {chatsId} durch die ID des Chats, auf den Sie reagieren möchten. Der Anforderungstext sollte ein JSON-Benutzerobjekt mit den folgenden Eigenschaften enthalten:
- tenantId: Die mandanten-ID Ihres Teams-Mandanten.
- ID: Die UserID des Benutzers in Ihrem Mandanten, aus dem Sie den Chat verschieben möchten.
Eine Anforderung könnte beispielsweise wie folgt aussehen:
POST https://graph.microsoft.com/beta/chats/19:7d8980.........f94061cf8c2@unq.gbl.spaces/removeAllAccessForUser
Content-Type: application/json
{
"user": {
"id" : "d864e79f-……..-0eeb4d61fdc2",
"tenantId": "2a690434-………-13600199a"
}
}
Zum Authentifizieren der Anforderung müssen Sie ein gültiges Zugriffstoken im Autorisierungsheader bereitstellen. Das Zugriffstoken sollte über die Berechtigungen Chat.ReadWrite.All verfügen. Zum Abrufen des Zugriffstokens können Sie den Azure AD OAuth 2.0-Endpunkt verwenden. Weitere Informationen finden Sie unter Microsoft Graph – Abrufen des Zugriffs im Namen eines Benutzers.
Wenn die Anforderung erfolgreich ist, weist die Antwort den status Code "204 No Content" und einen leeren Text auf. Wenn die Anforderung fehlschlägt, enthält die Antwort einen Fehlercode und eine Meldung, die den Grund für den Fehler erläutert.
Es gibt viele Möglichkeiten, ein Microsoft-Graph-API aufzurufen. Wenn Sie mit dem Prozess nicht vertraut sind, beginnen Sie mit einem interaktiven Tool wie Graph Explorer. Einige Administratoren erstellen eine App oder verwenden PowerShell für die Interaktion mit Graph-APIs.
Beispielcode
Der folgende PowerShell-Code kann als Ausgangspunkt verwendet werden. Dieser Code zeigt, wie Sie das Benutzertoken abrufen, eine Client-App erstellen, die über die erforderlichen Berechtigungen verfügt, und wie Sie diese Client-App verwenden, um die Graph-API aufzurufen, um die Nachricht zu entfernen.
param(
# Tenant id for the user whom the chat access is going to be removed
[Parameter(Mandatory=$true)]
[String]
$TenantId,
# User id for the user whom the chat access is going to be removed
[Parameter(Mandatory=$true)]
[String]
$UserId,
# Id of the chat that from which access will be removed
[Parameter(Mandatory=$true)]
[String]
$ThreadId
)
# These may not all be necessary in your environment
# Install Microsoft.Graph.Authentication module for all users (requires admin rights)
if (Get-Module -ListAvailable -Name Microsoft.Graph.Authentication) {
Write-Host "Microsoft.Graph.Authentication module found." -ForegroundColor "Green"
}
else {
Write-Host "Microsoft.Graph.Authentication module not found. Installing"
Install-Module Microsoft.Graph.Authentication -Scope AllUsers -Force
}
# Install Microsoft.Graph.Applications module for all users (requires admin rights)
if (Get-Module -ListAvailable -Name Microsoft.Graph.Applications) {
Write-Host "Microsoft.Graph.Applications module found." -ForegroundColor "Green"
}
else {
Write-Host "Microsoft.Graph.Application module not found. Installing"
Install-Module Microsoft.Graph.Applications -Scope AllUsers -Force
}
# Install MSAL.PS module for all users (requires admin rights)
if (Get-Module -ListAvailable -Name MSAL.PS) {
Write-Host "MSAL module found." -ForegroundColor "Green"
}
else {
Write-Host "MSAL module not found. Installing"
Install-Module MSAL.PS -Scope AllUsers -Force
}
# Connect to graph and verify that a client application exists for this purpose - if not, create one
Connect-MgGraph -Scopes "Application.ReadWrite.All", "DelegatedPermissionGrant.ReadWrite.All"
# Get client app info
$App = Get-MgApplication -Filter "DisplayName eq 'RemoveAllAccessForUserApp'"
$createAppParams = @{
publicClient = @{
redirectUris = "https://login.microsoftonline.com/common/oauth2/nativeclient"
}
}
# If client app is not found. Create it
if ($null -eq $App)
{
Write-Host "Client app not found. Creating new one." -ForegroundColor "Yellow"
$App = New-MgApplication -DisplayName 'RemoveAllAccessForUserApp' @createAppParams
Write-Host "Client app created. Waiting for 5 seconds before continuing." -ForegroundColor "Yellow"
Start-Sleep -Seconds 5
}
else
{
$AppId = $App.AppId
Write-Host "Client app with id '$AppId' found'" -ForegroundColor "Green"
}
$ClientId = $App.AppId
# Now that we have the ID for our client application, we can call the RemoveAccessForUser API...
# Msal parameters required to get access token.
$MsalParams = @{
ClientId = $ClientId
TenantId = $TenantId
Scopes = 'Chat.ReadWrite.All'
}
# Get access token, it will prompt for interactive login
$MsalResponse = Get-MsalToken @MsalParams
$AccessToken = $MsalResponse.AccessToken
# Request authorization header containing the access token
$AuthHeader = @{
Authorization = "Bearer $AccessToken"
}
# Request url
$apiUrl = "https://graph.microsoft.com/beta/chats/$ThreadId/removeAllAccessForUser"
# Prepare request body
$Body = @{
user = @{
id = "$UserId"
tenantId = "$TenantId"
}
}
$Body = $Body | ConvertTo-Json
# Execute request
Write-Host "Executing RemoveAllAccessForUser request."
try {
Invoke-RestMethod -Headers $AuthHeader -Uri $apiUrl -Method POST -ContentType 'application/json' -Body $Body
Write-Host "Rquest to RemoveAllAccessForUser api succeeded." -ForegroundColor "Green"
} catch {
Write-Host "Request to RemoveAllAccessForUser api failed." -ForegroundColor "Red"
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
$receiveStream = $_.Exception.Response.GetResponseStream();
Write-Host ([System.Text.Encoding]::ASCII).GetString($receiveStream.ToArray())
}
Write-Host "Disconnecting from Microsoft Graph!"
Disconnect-MgGraph