Udostępnij za pośrednictwem


Ograniczanie dostępu do usługi Microsoft Teams, gdy pracownicy pierwszej linii są poza zmianą

Omówienie

Czas pracy to funkcja, która umożliwia administratorom ograniczanie dostępu do usługi Microsoft Teams dla pracowników zmianowych na urządzeniach przenośnych z systemem Android i iOS. Te kontrolki są przeznaczone do scenariuszy urządzeń typu "przynieś własne urządzenie" (BYOD) lub dedykowanych urządzeń należących do firmy dla pracowników pierwszej linii. Dowiedz się więcej o scenariuszach urządzeń pierwszej linii.

Dzięki tej funkcji możesz zablokować dostęp do usługi Teams lub wyświetlić komunikat ostrzegawczy, gdy pracownicy pierwszej linii, którzy są poza aplikacją Shift Open Teams. Rozważ włączenie czasu pracy dla pracowników pierwszej linii, jeśli:

  • Martwisz się, że pracownicy pierwszej linii proszą o wynagrodzenie poza godzinami pracy, jeśli uzyskują dostęp do aplikacji służbowych.
  • Lokalne przepisy i przepisy wymagają ograniczenia dostępu do aplikacji służbowych, gdy pracownicy są poza zmianą.

Jak to działa

Gdy pracownik pierwszej linii przechodzi na zmianę i otwiera aplikację Teams, aplikacja sprawdza, czy pracownik jest włączony, czy wyłączony.

  • Jeśli proces roboczy jest na zmianie, może uzyskać dostęp do usługi Teams.
  • Jeśli proces roboczy jest wyłączony, gdy usługa Teams jest otwarta, proces roboczy widzi ekran blokowy lub ostrzegawczy.
    • Jeśli skonfigurowano ekran blokowy, proces roboczy nie będzie mógł uzyskać dostępu do usługi Teams, dopóki nie zaloguje się do zmiany.
    • Jeśli skonfigurowano ekran ostrzegawczy, proces roboczy może go odrzucić i wybrać, czy używać usługi Teams według własnego uznania.
  • Jeśli proces roboczy korzysta z usługi Teams podczas wykreślania, proces roboczy zobaczy blok lub ekran ostrzegawczy dla aplikacji po wykreśleniu.

Zrzut ekranu przedstawiający ekran bloku dostępu i ekran ostrzeżenia.

Oprócz czasu pracy zalecamy również skonfigurowanie cichego czasu w celu automatycznego wyciszenia powiadomień usługi Teams, gdy pracownicy są poza zmianą.

Konfigurowanie czasu pracy

Wykonaj następujące kroki, aby włączyć czas pracy dla linii frontu.

Konfigurowanie zasad ochrony aplikacji dla systemów Android i iOS

Użyj Microsoft Intune zasad ochrony aplikacji, aby skonfigurować czas pracy w celu zablokowania lub ostrzeżenia dostępu do aplikacji Teams na urządzeniach z systemem Android i iOS. Aby uzyskać więcej informacji na temat ustawień zasad, zobacz:

Łączenie systemu zarządzania pracownikami (WFM) z interfejsem API workingTimeSchedule

Tworzenie aplikacji

  1. Utwórz aplikację w Microsoft Entra dla interfejs Graph API workingTimeSchedule.

    Podczas rejestrowania aplikacji upewnij się, że wybrano opcję Konta tylko w tym katalogu organizacyjnym (pojedyncza dzierżawa ), aby tylko użytkownicy w dzierżawie mogli korzystać z aplikacji. Aby dowiedzieć się więcej, zobacz Rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft.

  2. Dodaj ukryte uprawnienie aplikacji do wywoływania interfejs Graph API przy użyciu wymaganego zakresu . Schedule-WorkingTime.ReadWrite.All

    1. Zaloguj się do aplikacji w Azure Portal.

    2. Przejdź do karty Manifest . Zobaczysz kod JSON zawierający pełną definicję aplikacji.

    3. Na końcu manifestu dodaj właściwość requiredResourceAccess .

      Ta właściwość określa zestaw uprawnień, do których aplikacja wymaga dostępu. Innymi słowy, zawiera wszystkie interfejsy API, które aplikacja może wywołać. Jeśli ta właściwość jest już obecna w manifeście, interfejs API ma już przyznane uprawnienia.

    4. Wewnątrz tablicy requiredResourceAccess dodaj obiekt o identyfikatorze 00000003-0000-0000-0000-c000-0000000000000000 , aby określić uprawnienia aplikacji Graph.

      Jeśli masz już obiekt o tym samym identyfikatorze w tablicy requiredResourceAccess , musisz dodać tylko następujące elementy wewnątrz tablicy resourceAccess :

      • Obiekt o identyfikatorze nowego ukrytego uprawnienia . 0b21c159-dbf4-4dbb-a6f6-490e412c716e
      • Typ uprawnień. W tym przypadku . Role

      Oto przykład tego, jak może wyglądać koniec 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. Zapisz zmiany.

Aby wykonać ten krok, musisz być administratorem dzierżawy.

  1. W przeglądarce przejdź do https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}&pozycji ; response_type=code&scope=https://graph.microsoft.com/.default.
  2. W adresie URL zastąp ClientAppId ciąg identyfikatorem aplikacji.
  3. W oknie dialogowym zgody wybierz pozycję Akceptuj , aby udzielić zgody administratora dla całej dzierżawy na nowe ukryte uprawnienie dla aplikacji.

Wywoływanie programu Graph z poziomu aplikacji

Poniżej przedstawiono sposób wywoływania punktów końcowych programu Graph z aplikacji przy użyciu przykładowego kodu w języku C#.

  1. Utwórz nowy projekt konsoli przy użyciu zestawu SDK platformy .NET 6 lub .NET 7.

  2. Microsoft.Identity.Client Zainstaluj pakiet NuGet.

  3. Otwórz plik program.cs i skopiuj i wklej do niego następujący przykładowy kod:

        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. W kodzie zmień następujące elementy:

    • tenantId: Zastąp ciąg identyfikatorem dzierżawy.
    • clientId: zastąp ciąg identyfikatorem aplikacji.
    • clientSecret: w sekcji uwierzytelniania aplikacji musisz dodać wpis tajny klienta. Możesz również wybrać użycie certyfikatu zabezpieczeń i odpowiednio zmienić kod.
    • userId: zastąp ciąg użytkownikiem, do którego chcesz zastosować zasady inWorkingTime lub outOfWorkingTime.

Konfigurowanie czasu ciszy

Ten krok jest opcjonalny, ale zalecany.

Skonfiguruj zasady cichego czasu w Intune, aby automatycznie wyciszać powiadomienia usługi Teams dla pracowników pierwszej linii w godzinach pracy. Dowiedz się więcej na temat tworzenia zasad czasu ciszy.

Często zadawane pytania

Czy muszę korzystać z aplikacji Shifts w aplikacji Teams, aby skorzystać z tej funkcji?

Nie, ta funkcja opiera się na sygnału wejścia/wyjścia zegara z WFM.

Czy mogę użyć czasu pracy, jeśli nie mam systemu w/w poziomie zegara?

Nie, do korzystania z tej funkcji jest wymagany sygnał wejścia/wyjścia zegara.