Limitare l'accesso a Microsoft Teams quando i lavoratori in prima linea sono fuori turno
Panoramica
L'orario di lavoro è una funzionalità che consente agli amministratori di limitare l'accesso a Microsoft Teams per i turnisti nei dispositivi mobili Android e iOS. Questi controlli sono progettati per scenari BYOD (Bring Your Own Device) o dispositivi dedicati di proprietà dell'azienda per i lavoratori in prima linea. Altre informazioni sugli scenari dei dispositivi in prima linea.
Con questa funzionalità è possibile bloccare l'accesso a Teams o visualizzare un messaggio di avviso quando i lavoratori in prima linea che sono fuori turno aprono Teams. Valutare la possibilità di abilitare l'orario di lavoro per la forza lavoro in prima linea se:
- Si è preoccupati per i lavoratori in prima linea che chiedono di pagare al di fuori dell'orario di lavoro se accedono alle app di lavoro.
- Le leggi e le normative locali richiedono di limitare l'accesso alle app aziendali quando i dipendenti sono fuori turno.
Come funziona
Quando un ruolo di lavoro in prima linea passa al turno e apre Teams, l'app controlla se il ruolo di lavoro è attivato o disattivato.
- Se il ruolo di lavoro è in turno, può accedere a Teams.
- Se il ruolo di lavoro è fuori turno quando Teams è aperto, il ruolo di lavoro visualizza una schermata di blocco o avviso.
- Se è stata configurata una schermata di blocco, il ruolo di lavoro non può accedere a Teams finché non esegue l'orologio al turno.
- Se è stata configurata una schermata di avviso, il ruolo di lavoro può ignorarla e scegliere se usare Teams a propria discrezione.
- Se un ruolo di lavoro usa Teams durante l'uscita, il ruolo di lavoro visualizza una schermata di blocco o di avviso per l'app dopo il timeout.
Oltre all'orario di lavoro, è consigliabile configurare anche il tempo di inattività per disattivare automaticamente le notifiche di Teams quando i lavoratori sono fuori turno.
Configurare l'orario di lavoro
Seguire questa procedura per abilitare l'orario di lavoro per la prima linea.
Configurare i criteri di protezione delle app per Android e iOS
Usare Microsoft Intune criteri di protezione delle app per configurare l'orario di lavoro per bloccare o avvisare l'accesso a Teams nei dispositivi Android e iOS. Per altre informazioni sulle impostazioni dei criteri, vedere:
- Impostazioni dei criteri di protezione delle app Android - Avvio condizionale
- Impostazioni dei criteri di protezione delle app iOS - Avvio condizionale
Connettere il sistema di gestione della forza lavoro (WFM) all'API workingTimeSchedule
Creare un'applicazione
Creare un'applicazione in Microsoft Entra per il API Graph workingTimeSchedule.
Quando si registra l'applicazione, assicurarsi di scegliere l'opzione Account solo in questa directory organizzativa (tenant singolo) in modo che solo gli utenti del tenant possano usare l'applicazione. Per altre informazioni, vedere Registrare un'applicazione con il Microsoft Identity Platform.
Aggiungere l'autorizzazione dell'applicazione nascosta per chiamare il API Graph usando l'ambito richiesto,
Schedule-WorkingTime.ReadWrite.All
.Accedere all'applicazione nel portale di Azure.
Passare alla scheda Manifesto . Verrà visualizzato un codice JSON che contiene la definizione completa dell'applicazione.
Alla fine del manifesto aggiungere la
requiredResourceAccess
proprietà .Questa proprietà specifica il set di autorizzazioni a cui l'applicazione richiede l'accesso. In altre parole, contiene tutte le API che l'applicazione può chiamare. Se questa proprietà è già presente nel manifesto, all'API sono già state concesse alcune autorizzazioni.
All'interno della
requiredResourceAccess
matrice aggiungere un oggetto con ID per00000003-0000-0000-0000-c000-0000000000000000
specificare le autorizzazioni dell'applicazione Graph.Se si dispone già di un oggetto con questo stesso ID all'interno
requiredResourceAccess
della matrice, è sufficiente aggiungere quanto segue all'interno dellaresourceAccess
matrice:- Oggetto con l'ID della nuova autorizzazione nascosta,
0b21c159-dbf4-4dbb-a6f6-490e412c716e
. - Tipo di autorizzazione. In questo caso,
Role
.
Ecco un esempio dell'aspetto della fine del manifesto:
{ ... "preAuthorizedApplications": [], "publisherDomain": "microsoft.onmicrosoft.com", "replyUrlsWithType": [ { "url": "https://localhost:44321/signin-oidc", "type": "Web" }, { "url": "https://localhost:44321/", "type": "Web" } ], "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "0b21c159-dbf4-4dbb-a6f6-490e412c716e", "type": "Role" } ] } ], "samlMetadataUrl": null, "signInUrl": null, "signInAudience": "AzureADMyOrg", "tags": [], "tokenEncryptionKeyId": null }
- Oggetto con l'ID della nuova autorizzazione nascosta,
Salvare le modifiche.
Concedere il consenso dell'amministratore a livello di tenant all'autorizzazione nascosta dell'applicazione
Per eseguire questo passaggio, è necessario essere un amministratore tenant.
- Nel browser passare a https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}& response_type=code&scope=https://graph.microsoft.com/.default.
- Nell'URL sostituire
ClientAppId
con l'ID app. - Nella finestra di dialogo di consenso scegliere Accetta per concedere il consenso amministratore a livello di tenant alla nuova autorizzazione nascosta per l'applicazione.
Chiamare Graph dall'applicazione
Ecco come chiamare gli endpoint Graph dall'applicazione usando codice di esempio in C#.
Creare un nuovo progetto console usando .NET 6 o .NET 7 SDK.
Installare il
Microsoft.Identity.Client
pacchetto NuGet.Aprire il file program.cs e copiarvi e incollarvi il codice di esempio seguente:
using System.Text; using Microsoft.Identity.Client; var userId = "928bf23a-81e8-47c9-ad54-2c0206248afe"; var path = Path.Combine(Path.GetTempPath(), "workingTimeTokenGenerator.txt"); string? accessToken; if (!File.Exists(path) || (DateTime.UtcNow - new FileInfo(path).LastWriteTimeUtc).TotalMinutes > 59) { var clientId = "00001111-aaaa-2222-bbbb-3333cccc4444"; var clientSecret = "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2"; var tenantId = "cad3e174-69d3-4707-abd2-f527f45c367a"; var scopes = new string[] { "00000003-0000-0000-c000-000000000000/.default" }; var app = ConfidentialClientApplicationBuilder.Create(clientId) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(scopes) .WithAuthority(AzureCloudInstance.AzurePublic, tenantId) .ExecuteAsync(); accessToken = result.AccessToken; File.WriteAllText(path, accessToken); } else { accessToken = File.ReadAllText(path); } int number; while (true) { Console.WriteLine("Press 1 for startWorkingTime, 2 for endWorkingTime."); var choice = Console.ReadLine(); if (!Int32.TryParse(choice, out number) || !new[] { 1, 2}.Contains(number)) { Console.WriteLine("Out-of-range election."); continue; } break; } Console.WriteLine("Performing request..."); var httpClient = new HttpClient(); var message = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri($"https://graph.microsoft.com/beta/users/{userId}/solutions/schedule/{(number == 1 ? "startWorkingTime" : "endWorkingTime")}") }; message.Headers.Add("Authorization", $"Bearer {accessToken}"); message.Content = new StringContent("", Encoding.UTF8, "application/json"); var response = await httpClient.SendAsync(message); if (!response.IsSuccessStatusCode) { string? content = null; try { content = await response.Content?.ReadAsStringAsync(); } catch { } Console.WriteLine($"Graph returned a non success status code: {response.StatusCode}. Reason phrase: {response.ReasonPhrase}." + (content is null ? "Unable to get the response body." : $"Content: {content}")); } else { Console.WriteLine($"Graph returned a success status code: {response.StatusCode}."); } Console.WriteLine("Press any key to exit."); _ = Console.ReadKey();
Nel codice modificare quanto segue:
-
tenantId
: sostituire con l'ID tenant. -
clientId
: sostituire con l'ID dell'applicazione. -
clientSecret
: è necessario aggiungere un segreto client nella sezione di autenticazione dell'applicazione. È anche possibile scegliere di usare un certificato di sicurezza e modificare il codice di conseguenza. -
userId
: sostituire con l'utente a cui si vuole applicare il criterio inWorkingTime o outOfWorkingTime.
-
Configurare l'ora non interattiva
Questo passaggio è facoltativo ma consigliato.
Configurare i criteri di tempo non lavorativo in Intune per disattivare automaticamente le notifiche di Teams per i lavoratori in prima linea durante le ore non lavorative. Altre informazioni su come creare criteri di tempo non interattiva.
Domande frequenti
È necessario usare l'app Turni in Teams per sfruttare questa funzionalità?
No, questa funzionalità si basa sul segnale di entrata/uscita del WFM.
È possibile usare l'orario di lavoro se non si dispone di un sistema di entrata/uscita?
No, per usare questa funzionalità è necessario un segnale di entrata/uscita.