Sdílet prostřednictvím


Omezení přístupu k Microsoft Teams, když jsou pracovníci v první linii mimo směnu

Přehled

Pracovní doba je funkce, která správcům umožňuje omezit přístup k Microsoft Teams pro pracovníky ve směnách na mobilních zařízeních s Androidem a iOS. Tyto ovládací prvky jsou navržené pro scénáře používání vlastního zařízení (BYOD) nebo vyhrazených zařízení vlastněných společností pro pracovníky v první linii. Přečtěte si další informace o scénářích zařízení v první linii.

Pomocí této funkce můžete zablokovat přístup k Teams nebo zobrazit upozornění, když pracovníci v první linii, kteří jsou mimo směnu, otevřou Aplikaci Teams. Zvažte povolení pracovní doby pro pracovníky v první linii, pokud:

  • Obáváte se, že pracovníci v první linii žádají o mzdu mimo pracovní dobu, pokud přistupují k pracovním aplikacím.
  • Místní zákony a předpisy vyžadují, abyste omezili přístup k pracovním aplikacím, když jsou zaměstnanci mimo směnu.

Jak to funguje…

Když pracovník v první linii přejde na směnu a otevře Aplikaci Teams, aplikace zkontroluje, jestli je pracovník na směně nebo mimo směnu.

  • Pokud je pracovník ve směně, má přístup k Teams.
  • Pokud je pracovní proces mimo směnu, když je aplikace Teams otevřená, zobrazí se mu obrazovka blokování nebo upozornění.
    • Pokud jste nakonfigurovali blokovou obrazovku, pracovník nebude mít přístup k Teams, dokud nepřijde na směnu.
    • Pokud jste nakonfigurovali obrazovku s upozorněním, pracovník ji může zavřít a rozhodnout se, jestli má aplikaci Teams používat podle svého uvážení.
  • Pokud pracovník při oddálení používá Teams, zobrazí se mu bloková nebo varovná obrazovka aplikace poté, co odpojí.

Snímek obrazovky blokování přístupu a obrazovky s upozorněním

Kromě pracovní doby doporučujeme nastavit také tichý čas, který automaticky ztlumí oznámení Teams, když jsou pracovníci mimo směnu.

Nastavení pracovní doby

Pokud chcete povolit pracovní dobu pro vaši frontovou linku, postupujte podle těchto kroků.

Konfigurace zásad ochrany aplikací pro Android a iOS

Pomocí zásad ochrany aplikací Microsoft Intune můžete nakonfigurovat pracovní dobu tak, aby blokovala nebo upozorňovala přístup k Teams na zařízeních s Androidem a iOSem. Další informace o nastavení zásad najdete tady:

Připojte svůj systém pro správu pracovních sil (WFM) k rozhraní API workingTimeSchedule.

Vytvoření aplikace

  1. V Microsoft Entra vytvořte aplikaci pro Graph API workingTimeSchedule.

    Při registraci aplikace se ujistěte, že jste zvolili možnost Účty pouze v tomto organizačním adresáři (jeden tenant), aby aplikaci mohli používat jenom uživatelé ve vašem tenantovi. Další informace najdete v tématu Registrace aplikace pomocí Microsoft identity platform.

  2. Přidejte oprávnění skryté aplikace pro volání Graph API pomocí požadovaného oboru Schedule-WorkingTime.ReadWrite.All.

    1. Přihlaste se k aplikaci v Azure Portal.

    2. Přejděte na kartu Manifest . Zobrazí se JSON, který obsahuje úplnou definici vaší aplikace.

    3. Na konec manifestu přidejte requiredResourceAccess vlastnost .

      Tato vlastnost určuje sadu oprávnění, ke kterým vaše aplikace vyžaduje přístup. Jinými slovy obsahuje všechna rozhraní API, která může vaše aplikace volat. Pokud se tato vlastnost už v manifestu nachází, vaše rozhraní API už má určitá oprávnění udělená.

    4. requiredResourceAccess Do pole přidejte objekt s ID 00000003-0000-0000-0000-c000-0000000000000000 pro zadání oprávnění aplikace Graph.

      Pokud už v requiredResourceAccess poli máte objekt se stejným ID, stačí do resourceAccess pole přidat následující:

      • Objekt s ID nového skrytého oprávnění 0b21c159-dbf4-4dbb-a6f6-490e412c716e.
      • Typ oprávnění. V tomto případě . Role

      Tady je příklad toho, jak by mohl vypadat konec manifestu:

      {
        ...
        "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. Uložte změny.

Abyste mohli tento krok provést, musíte být správcem tenanta.

  1. V prohlížeči přejděte na https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}&adresu ; response_type=code&scope=https://graph.microsoft.com/.default.
  2. V adrese URL nahraďte ClientAppId id vaší aplikace.
  3. V dialogovém okně souhlasu zvolte Přijmout a udělte souhlas správce v rámci celého tenanta s novým skrytým oprávněním pro aplikaci.

Volání Graphu z aplikace

Tady je postup, jak volat koncové body Graphu z aplikace pomocí ukázkového kódu v jazyce C#.

  1. Vytvořte nový projekt konzoly pomocí sady .NET 6 nebo .NET 7 SDK.

  2. Microsoft.Identity.Client Nainstalujte balíček NuGet.

  3. Otevřete soubor program.cs a zkopírujte do něj a vložte do něj následující ukázkový kód:

        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. V kódu změňte následující:

    • tenantId: Nahraďte id vašeho tenanta.
    • clientId: Nahraďte ID vaší aplikace.
    • clientSecret: Tajný klíč klienta musíte přidat v části ověřování vaší aplikace. Můžete se také rozhodnout použít certifikát zabezpečení a odpovídajícím způsobem změnit kód.
    • userId: Nahraďte uživatelem, u kterého chcete použít zásady inWorkingTime nebo outOfWorkingTime.

Nastavení tichého času

Tento krok je volitelný, ale doporučuje se.

Nakonfigurujte zásady tichého času v Intune tak, aby automaticky ztlumily oznámení Teams pro pracovníky v první linii během nepracovních hodin. Přečtěte si další informace o tom, jak vytvořit zásady klidu.

Nejčastější dotazy

Musím používat aplikaci Směny v Teams, abych tuto funkci využil(a)?

Ne, tato funkce závisí na signálu pro příchozí/odchozí hodiny z vašeho WFM.

Můžu využít pracovní dobu, když nemám zavedený systém pro in/out?

Ne, k použití této funkce je nutný signál pro příchozí/odchozí hodiny.