Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Como administrador de locatários, você pode usar a nova API do Graph RemoveAllAccessForUser para remover um chat iniciado externamente da exibição do usuário.
Os administradores do Microsoft Teams podem precisar remover chats de usuário criados por pessoas de fora da sua organização. Por exemplo, um de seus usuários recebeu uma solicitação de chat de alguém de fora da sua empresa. Esse chat pode conter conteúdo impróprio ou mal-intencionado e, como administrador, você pode remover esse chat para ajudar a proteger o usuário.
Para usar a API do Graph RemoveAllAccessForUser, você precisa fornecer três parâmetros: tenantId, userId e chatsId/threadId. O tenantId é o identificador exclusivo do locatário do Teams. A userId é o identificador exclusivo do usuário para o qual você deseja remover o chat. O chatsId/threadId é o identificador exclusivo do tópico de chat do Teams do qual você deseja remover o usuário.
Você pode obter esses três parâmetros nos novos eventos do Log de Auditoria Unificado (UAL) que são gerados quando um usuário externo se comunica com um usuário em seu locatário. Os eventos UAL contêm informações sobre o remetente, o destinatário, o thread de chat e a mensagem. Você pode usar os eventos UAL para identificar o thread de chat do qual deseja revogar o acesso e, em seguida, extrair o tenantId, o userId e o chatsId/threadId dos detalhes do evento.
Etapas para usar a API do Graph RemoveAllAccessForUser
- Etapa 1: Procure os eventos UAL que correspondem aos seus critérios. Se quiser encontrar todos os eventos em que um usuário foi adicionado a um chat, você poderá usar o evento "MemberAdded" na consulta de pesquisa.
- Etapa 2: Extrair o tenantId, o userId e o chatsId/threadId dos detalhes do evento UAL
- Etapa 3: Chamar a API do Graph RemoveAllAccessForUser com os parâmetros desejados
Etapa 1: Procurar eventos UAL
Para pesquisar eventos UAL específicos, você pode usar a API Search-UnifiedAuditLog graph ou usar o recurso de pesquisa de log de auditoria no portal do Microsoft Purview. As instruções a seguir usam o portal do Microsoft Purview. Execute as seguintes etapas:
Entre como administrador de log de https://purview.microsoft.com auditoria.
Na navegação à esquerda, selecione Auditoria.
Na página Pesquisa de log de auditoria, especifique os seguintes critérios:
- Na página Auditoria, selecione Pesquisar.
- Atividades: Selecione MemberAdded (e, opcionalmente, MessageReceived) no campo Atividades – nomes de operação e escolha MicrosoftTeams para a Carga de trabalho.
- Intervalo de datas: selecione um intervalo de datas que abranja o período em que o usuário externo se comunicou com o usuário em seu locatário. (opcional) Usuários: insira o UPN do usuário em seu locatário no qual você está interessado.
Selecione Pesquisar. Esse comando enfileira uma pesquisa a ser executada em segundo plano.
Depois da conclusão, examine os resultados da pesquisa e identifique os eventos UAL que envolvem o chat e o usuário nos quais você está interessado (Etapa 3 abaixo).
Etapa 2: Extrair o tenantId, o userId e o chatsId/threadId dos detalhes do evento UAL
Para extrair o tenantId, o userId e o chatsId/threadId dos detalhes do evento UAL, você pode usar os campos OrganizationId, UserKey e ChatThreadId do evento. Se você pesquisou o evento MemberAdded , poderá ver eventos em que seus usuários foram adicionados a um chat externo e também em que seus usuários adicionaram um usuário externo a um chat. Encontre os eventos em que o usuário em seu locatário está na seção de detalhes Membros (indica que esse é o usuário que foi adicionado — veja a figura 2 abaixo). Para fazer isso, execute estas etapas:
Selecione um dos eventos UAL que envolvem o usuário externo do qual você deseja revogar o acesso.
No painel Detalhes do evento:
- Copie o valor do campo OrganizationId . Esse valor é a tenantId do locatário do Teams.
- Copie o valor do campo UserKey . Esse valor é a userId do usuário no locatário que foi adicionado ao chat.
- Copie o valor do campo ChatThreatId . Esse valor é o chatsId/threadId do thread de chat do Teams ao qual a mensagem pertence.
Veja a captura de tela a seguir mostrando um exemplo de um detalhe de resultado de pesquisa do Purview:
Figura 1 (detalhes do evento UAL MemberAdded)
Figura 2 (Detalhes dos membros do evento UAL MemberAdded)
Etapa 3: Chamar a API do Graph RemoveAllAccessForUser com os parâmetros desejados
Para chamar a API do Graph RemoveAllAccessForUser com os parâmetros, você precisa usar uma solicitação HTTP POST para a API do graph:
POST https://graph.microsoft.com/beta/chats/{chatsId}/removeAllAccessForUser
Substitua {chatsId} pela ID do chat no qual você deseja atuar. O corpo da solicitação deve conter um objeto de usuário JSON com as seguintes propriedades:
- tenantId: o tenantID do locatário do Teams.
- Id: a userID do usuário em seu locatário do qual você deseja mover o chat.
Por exemplo, uma solicitação pode ter esta aparência:
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"
}
}
Para autenticar a solicitação, você precisa fornecer um token de acesso válido no cabeçalho de Autorização. O token de acesso deve conter o Chat. ReadWrite.All. Para obter o token de acesso, você pode usar o ponto de extremidade OAuth 2.0 do Azure AD. Para obter mais informações, consulte Microsoft Graph - Obter acesso em nome de um usuário.
Se a solicitação for bem-sucedida, a resposta terá um código de status de "204 Sem Conteúdo" e um corpo vazio. Se a solicitação falhar, a resposta terá um código de erro e uma mensagem que explica o motivo da falha.
Há muitas maneiras de chamar uma API do Graph – se você não estiver familiarizado com o processo, comece com uma ferramenta interativa como o Graph Explorer. Alguns administradores criam um aplicativo ou usam o PowerShell para interagir com APIs do Graph.
Código de exemplo
O seguinte código do PowerShell pode ser usado como ponto de partida. Este código mostra como adquirir o token de usuário, criar um aplicativo cliente que tenha as permissões necessárias e como usar esse aplicativo cliente para chamar a API do Graph para remover a mensagem.
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