Rimuovere una chat esterna dalla visualizzazione di un utente in Microsoft Teams (amministratore)

Gli amministratori tenant possono usare la nuova API Graph RemoveAllAccessForUser per rimuovere una chat avviata esternamente dalla visualizzazione dell'utente.

Gli amministratori di Microsoft Teams potrebbero dover rimuovere le chat utente create da persone esterne all'organizzazione. Ad esempio, uno degli utenti ha ricevuto una richiesta di chat da qualcuno all'esterno dell'azienda. La chat potrebbe contenere contenuti inappropriati o dannosi e, in qualità di amministratore, puoi rimuovere la chat per proteggere l'utente.

Per usare la API Graph RemoveAllAccessForUser, è necessario fornire tre parametri: tenantId, userId e chatsId/threadId. TenantId è l'identificatore univoco del tenant di Teams. UserId è l'identificatore univoco dell'utente per cui si vuole rimuovere la chat. L'id chat/threadId è l'identificatore univoco del thread di chat di Teams da cui si vuole rimuovere l'utente.

È possibile ottenere questi tre parametri dai nuovi eventi del log di controllo unificato generati quando un utente esterno comunica con un utente nel tenant. Gli eventi della Registrazione accesso utenti contengono informazioni sul mittente, sul destinatario, sul thread della chat e sul messaggio. È possibile usare gli eventi della Registrazione accesso utenti per identificare il thread di chat da cui revocare l'accesso e quindi estrarre tenantId, userId e chatsId/threadId dai dettagli dell'evento.

Procedura per usare la API Graph RemoveAllAccessForUser

  • Passaggio 1: cercare gli eventi della Registrazione accesso utenti che corrispondono ai criteri specificati. Se si vogliono trovare tutti gli eventi in cui un utente è stato aggiunto a una chat, è possibile usare l'evento "MemberAdded" nella query di ricerca.
  • Passaggio 2: Estrarre tenantId, userId e chatsId/threadId dai dettagli dell'evento della Registrazione accesso utenti
  • Passaggio 3: Chiamare l'API Graph RemoveAllAccessForUser con i parametri desiderati

Passaggio 1: Cercare gli eventi della Registrazione accesso utenti

Per cercare specifici eventi della Registrazione accesso utenti, è possibile usare l'API graph di Search-UnifiedAuditLog oppure la funzionalità di ricerca nel log di controllo nel Portale di conformità di Microsoft Purview. Le istruzioni seguenti usano la Portale di conformità di Microsoft Purview. Eseguire le operazioni seguenti:

  1. Accedere a come https://compliance.microsoft.com amministratore del log di controllo.

  2. Nel riquadro di spostamento sinistro selezionare Controlla.

  3. Nella pagina Ricerca log di controllo specificare i criteri seguenti:

    • Nella pagina Controllo selezionare Cerca.
    • Attività: selezionare MemberAdded (e facoltativamente MessageReceived) dal campo Attività - nomi operazioni e scegliere MicrosoftTeams per il carico di lavoro.
    • Intervallo di date: selezionare un intervallo di date che copre il periodo di tempo in cui l'utente esterno ha comunicato con l'utente nel tenant. (facoltativo) Utenti: immettere l'UPN dell'utente nel tenant a cui si è interessati.
  4. Selezionare Cerca. Questo comando accoda una ricerca da eseguire in background.

Al termine, esaminare i risultati della ricerca e identificare gli eventi della Registrazione accesso utenti che coinvolgono la chat e l'utente a cui si è interessati (passaggio 3 di seguito).

Passaggio 2: Estrarre tenantId, userId e chatsId/threadId dai dettagli dell'evento della Registrazione accesso utenti

Per estrarre tenantId, userId e chatsId/threadId dai dettagli dell'evento della Registrazione accesso utenti, è possibile usare i campi OrganizationId, UserKey e ChatThreadId dell'evento. Se è stato cercato l'evento MemberAdded , potrebbero essere visualizzati eventi in cui gli utenti sono stati aggiunti a una chat esterna e anche in cui gli utenti hanno aggiunto un utente esterno a una chat. Trovare gli eventi in cui l'utente nel tenant si trova nella sezione Dettagli membri (indica che si tratta dell'utente aggiunto, vedere la figura 2 di seguito). A tale scopo, eseguire la procedura seguente:

  1. Selezionare uno degli eventi della Registrazione accesso utenti che coinvolgono l'utente esterno da cui revocare l'accesso.

  2. Nel riquadro Dettagli evento:

    • Copiare il valore del campo OrganizationId . Questo valore è il tenantId del tenant di Teams.
    • Copiare il valore del campo UserKey . Questo valore è il userId dell'utente nel tenant aggiunto alla chat.
    • Copiare il valore del campo ChatThreatId . Questo valore è il chatsId/threadId del thread di chat di Teams a cui appartiene il messaggio.

Vedi lo screenshot seguente che mostra un esempio di dettaglio dei risultati della ricerca Purview:

Microsoft Purview dettagli di ricerca
Figura 1 (dettagli dall'evento UAL MemberAdded)

Dettagli dei membri Microsoft Purview
Figura 2 (Dettagli membri dall'evento UAL MemberAdded)

Passaggio 3: Chiamare l'API Graph RemoveAllAccessForUser con i parametri desiderati

Per chiamare l'API Graph RemoveAllAccessForUser con i parametri, è necessario utilizzare una richiesta HTTP POST per l'API grafico:

POST https://graph.microsoft.com/beta/chats/{chatsId}/removeAllAccessForUser 

Sostituisci {chatsId} con l'ID della chat su cui vuoi agire. Il corpo della richiesta deve contenere un oggetto utente JSON con le seguenti proprietà:

  • tenantId: l'ID tenant del tenant di Teams.
  • ID: ID utente dell'utente nel tenant da cui si vuole spostare la chat.

Ad esempio, una richiesta potrebbe essere simile alla seguente:

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" 
  } 
} 

Per autenticare la richiesta, è necessario fornire un token di accesso valido nell'intestazione Autorizzazione. Il token di accesso deve avere le autorizzazioni Chat.ReadWrite.All. Per ottenere il token di accesso, è possibile usare l'endpoint OAuth 2.0 di Azure AD. Per altre informazioni, vedere Microsoft Graph - Ottenere l'accesso per conto di un utente.

Se la richiesta ha esito positivo, la risposta ha un codice di stato "204 Nessun contenuto" e un corpo vuoto. Se la richiesta non riesce, la risposta contiene un codice di errore e un messaggio che ne spiega il motivo.

Esistono molti modi per chiamare un API Graph Microsoft: se non hai familiarità con il processo, inizia con uno strumento interattivo come Esplora grafico. Alcuni amministratori creano un'app o usano PowerShell per interagire con le API Graph.

Codice di esempio

Il codice PowerShell seguente può essere usato come punto di partenza. Questo codice mostra come acquisire il token utente, creare un'app client con le autorizzazioni necessarie e come usare l'app client per chiamare il API Graph per rimuovere il messaggio.

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