Partager via


Limiter l’accès à Microsoft Teams lorsque les employés de première ligne ne sont pas en poste

Vue d’ensemble

Le temps de travail est une fonctionnalité qui permet aux administrateurs de limiter l’accès à Microsoft Teams pour les travailleurs par équipe sur les appareils mobiles Android et iOS. Ces contrôles sont conçus pour les scénarios byOD (bring-your-own-device) ou les scénarios d’appareils dédiés appartenant à l’entreprise pour les employés de première ligne. En savoir plus sur les scénarios d’appareils de première ligne.

Avec cette fonctionnalité, vous pouvez bloquer l’accès à Teams ou afficher un message d’avertissement lorsque les employés de première ligne qui ne sont pas en poste ouvrent Teams. Envisagez d’activer le temps de travail pour votre personnel de première ligne si :

  • Vous vous inquiétez du fait que les employés de première ligne demandent une rémunération en dehors des heures de travail s’ils accèdent à des applications professionnelles.
  • Les lois et réglementations locales vous obligent à restreindre l’accès aux applications professionnelles lorsque les employés sont en dehors de leur équipe.

Mode de fonctionnement

Lorsqu’un travailleur de première ligne arrive à son quart de travail et ouvre Teams, l’application vérifie si le worker est activé ou désactivé.

  • Si le worker est en équipe, il peut accéder à Teams.
  • Si le worker est désactivé lorsque Teams est ouvert, il voit un écran de bloc ou d’avertissement.
    • Si vous avez configuré un écran de bloc, le worker ne peut pas accéder à Teams tant qu’il n’a pas son quart de travail.
    • Si vous avez configuré un écran d’avertissement, le worker peut le ignorer et choisir d’utiliser Teams à sa discrétion.
  • Si un worker utilise Teams lors de l’horloge, le worker voit un écran de bloc ou d’avertissement pour l’application après l’horloge.

Capture d’écran de l’écran bloquer l’accès et de l’écran d’avertissement.

En plus du temps de travail, nous vous recommandons de configurer également le temps de silence pour désactiver automatiquement les notifications Teams lorsque les employés sont en dehors du quart de travail.

Configurer le temps de travail

Suivez ces étapes pour activer le temps de travail pour votre première ligne.

Configurer des stratégies de protection des applications pour Android et iOS

Utilisez Microsoft Intune stratégies de protection des applications pour configurer le temps de travail afin de bloquer ou d’avertir l’accès à Teams sur les appareils Android et iOS. Pour plus d’informations sur les paramètres de stratégie, consultez :

Connecter votre système de gestion du personnel (WFM) à l’API workingTimeSchedule

Créer une application

  1. Créez une application dans Microsoft Entra pour le API Graph workingTimeSchedule.

    Lorsque vous inscrivez votre application, veillez à choisir l’option Comptes dans cet annuaire organisationnel uniquement (locataire unique) afin que seuls les utilisateurs de votre locataire puissent utiliser l’application. Pour plus d’informations, consultez Inscrire une application avec le Plateforme d'identités Microsoft.

  2. Ajoutez l’autorisation d’application masquée pour appeler le API Graph à l’aide de l’étendue requise, Schedule-WorkingTime.ReadWrite.All.

    1. Connectez-vous à votre application dans le Portail Azure.

    2. Accédez à l’onglet Manifeste . Vous verrez un json qui contient la définition complète de votre application.

    3. À la fin du manifeste, ajoutez la requiredResourceAccess propriété .

      Cette propriété spécifie le jeu d’autorisations auquel votre application doit accéder. En d’autres termes, il contient toutes les API que votre application peut appeler. Si cette propriété est déjà présente dans le manifeste, certaines autorisations lui sont déjà accordées à votre API.

    4. À l’intérieur du requiredResourceAccess tableau, ajoutez un objet avec un ID pour 00000003-0000-0000-0000-c000-0000000000000000 spécifier les autorisations de l’application Graph.

      Si vous avez déjà un objet avec ce même ID à l’intérieur de votre requiredResourceAccess tableau, il vous suffit d’ajouter le code suivant à l’intérieur du resourceAccess tableau :

      • Objet avec l’ID de la nouvelle autorisation masquée, 0b21c159-dbf4-4dbb-a6f6-490e412c716e.
      • Type d’autorisation. Dans ce cas, Role.

      Voici un exemple de la fin du manifeste :

      {
        ...
        "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
      }
      
    5. Enregistrez les modifications.

Vous devez être un administrateur client pour effectuer cette étape.

  1. Dans votre navigateur, accédez à https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}& response_type=code&scope=https://graph.microsoft.com/.default.
  2. Dans l’URL, remplacez par ClientAppId votre ID d’application.
  3. Dans la boîte de dialogue de consentement, choisissez Accepter pour accorder le consentement administrateur à l’échelle du locataire à la nouvelle autorisation masquée pour l’application.

Appeler Graph à partir de l’application

Voici comment appeler des points de terminaison Graph à partir de l’application à l’aide d’un exemple de code en C#.

  1. Créez un projet de console à l’aide du Kit de développement logiciel (SDK) .NET 6 ou .NET 7.

  2. Installez le Microsoft.Identity.Client package NuGet.

  3. Ouvrez le fichier program.cs, puis copiez et collez-y l’exemple de code suivant :

        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();
    
  4. Dans le code, modifiez les éléments suivants :

    • tenantId: remplacez par votre ID de locataire.
    • clientId: remplacez par l’ID de votre application.
    • clientSecret: vous devez ajouter une clé secrète client dans la section d’authentification de votre application. Vous pouvez également choisir d’utiliser un certificat de sécurité et de modifier le code en conséquence.
    • userId: remplacez par l’utilisateur auquel vous souhaitez appliquer la stratégie inWorkingTime ou outOfWorkingTime.

Configurer l’heure de silence

Cette étape est facultative, mais recommandée.

Configurez des stratégies de temps de silence dans Intune pour désactiver automatiquement les notifications Teams pour les employés de première ligne pendant les heures creuses. En savoir plus sur la création de stratégies de temps silencieux.

Foire aux questions

Dois-je utiliser l’application Shifts dans Teams pour tirer parti de cette fonctionnalité ?

Non, cette fonctionnalité s’appuie sur le signal d’entrée/sortie de l’horloge de votre WFM.

Puis-je utiliser le temps de travail si je n’ai pas de système d’entrée/sortie d’horloge en place ?

Non, un signal d’entrée/sortie d’horloge est nécessaire pour utiliser cette fonctionnalité.