Dela via


Begränsa åtkomsten till Microsoft Teams när medarbetare i frontlinjen är lediga

Översikt

Arbetstid är en funktion som gör det möjligt för administratörer att begränsa åtkomsten till Microsoft Teams för skiftarbetare på mobila Android- och iOS-enheter. Dessa kontroller är utformade för BYOD (Bring Your Own Device) eller företagsägda dedikerade enhetsscenarier för medarbetare i frontlinjen. Läs mer om scenarier för enheter i frontlinjen.

Med den här funktionen kan du blockera åtkomst till Teams eller visa ett varningsmeddelande när medarbetare i frontlinjen som inte är lediga öppnar Teams. Överväg att aktivera arbetstid för personalen i frontlinjen om:

  • Du är bekymrad över att medarbetare i frontlinjen ber om lön utanför arbetstid om de får åtkomst till arbetsappar.
  • Lokala lagar och förordningar kräver att du begränsar åtkomsten till arbetsappar när anställda inte är lediga.

Så här fungerar det

När en medarbetare i frontlinjen klockar in på sitt skift och öppnar Teams kontrollerar appen om arbetaren är på eller av skift.

  • Om arbetaren är i skift kan de komma åt Teams.
  • Om arbetaren är avstängd när Teams är öppet ser arbetaren en block- eller varningsskärm.
    • Om du har konfigurerat en blockeringsskärm kan arbetaren inte komma åt Teams förrän de klockar in till sitt skift.
    • Om du har konfigurerat en varningsskärm kan arbetaren stänga den och välja om du vill använda Teams efter eget gottfinnande.
  • Om en arbetare använder Teams när han eller hon stämplar ut ser arbetaren en block- eller varningsskärm för appen när de har klockat ut.

Skärmbild av skärmen för blockåtkomst och varningsskärmen.

Tillsammans med arbetstiden rekommenderar vi att du även ställer in tyst tid för att automatiskt stänga av Teams-meddelanden när arbetare är lediga.

Konfigurera arbetstid

Följ de här stegen för att aktivera arbetstid för din frontlinje.

Konfigurera appskyddsprinciper för Android och iOS

Använd Microsoft Intune appskyddsprinciper för att konfigurera arbetstid för att blockera eller varna åtkomst till Teams på Android- och iOS-enheter. Mer information om principinställningar finns i:

Ansluta personalhanteringssystemet (WFM) till API:et workingTimeSchedule

Skapa ett program

  1. Skapa ett program i Microsoft Entra för Graph API workingTimeSchedule.

    När du registrerar ditt program måste du välja alternativet Endast konton i den här organisationskatalogen (enskild klient) så att endast användare i klientorganisationen kan använda programmet. Mer information finns i Registrera ett program med Microsofts identitetsplattform.

  2. Lägg till den dolda programbehörigheten för att anropa Graph API med det nödvändiga omfånget, Schedule-WorkingTime.ReadWrite.All.

    1. Logga in på ditt program i Azure Portal.

    2. Gå till fliken Manifest . Du ser en JSON som innehåller den fullständiga definitionen av ditt program.

    3. Lägg till egenskapen i slutet av manifestet requiredResourceAccess .

      Den här egenskapen anger den uppsättning behörigheter som programmet behöver åtkomst till. Med andra ord innehåller den alla API:er som programmet kan anropa. Om den här egenskapen redan finns i manifestet har ditt API vissa behörigheter som redan har beviljats.

    4. I matrisen requiredResourceAccess lägger du till ett objekt med ett ID 00000003-0000-0000-0000-c000-0000000000000000 för för att ange behörigheter för Graph-programmet.

      Om du redan har ett objekt med samma ID i requiredResourceAccess matrisen behöver du bara lägga till följande i matrisen resourceAccess :

      • Ett objekt med ID:t för den nya dolda behörigheten, 0b21c159-dbf4-4dbb-a6f6-490e412c716e.
      • Typ av behörighet. I det här fallet . Role

      Här är ett exempel på hur slutet av manifestet kan se ut:

      {
        ...
        "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. Spara ändringarna.

Du måste vara innehavaradministratör för att utföra det här steget.

  1. I webbläsaren går du till https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}& response_type=code&scope=https://graph.microsoft.com/.default.
  2. I URL:en ersätter du ClientAppId med ditt app-ID.
  3. I dialogrutan medgivande väljer du Acceptera för att bevilja administratörsmedgivande för hela klientorganisationen till den nya dolda behörigheten för programmet.

Anropa Graph från programmet

Så här anropar du Graph-slutpunkter från programmet med hjälp av exempelkod i C#.

  1. Skapa ett nytt konsolprojekt med .NET 6 eller .NET 7 SDK.

  2. Installera NuGet-paketet Microsoft.Identity.Client .

  3. Öppna program.cs-filen och kopiera och klistra in följande exempelkod i den:

        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. Ändra följande i koden:

    • tenantId: Ersätt med ditt klientorganisations-ID.
    • clientId: Ersätt med ID:t för ditt program.
    • clientSecret: Du måste lägga till en klienthemlighet i autentiseringsavsnittet i ditt program. Du kan också välja att använda ett säkerhetscertifikat och ändra koden i enlighet med detta.
    • userId: Ersätt med den användare som du vill tillämpa principen inWorkingTime eller outOfWorkingTime på.

Konfigurera tyst tid

Det här steget är valfritt men rekommenderas.

Konfigurera principer för tyst tid i Intune för att automatiskt stänga av Teams-meddelanden för medarbetare i frontlinjen under arbetstid. Läs mer om hur du skapar principer för tyst tid.

Vanliga frågor och svar

Behöver jag använda Shifts-appen i Teams för att dra nytta av den här funktionen?

Nej, den här funktionen förlitar sig på klockans in-/ut-signal från din WFM.

Kan jag använda arbetstid om jag inte har ett in-/ut-system för klocka på plats?

Nej, en in/ut-klocka-signal krävs för att använda den här funktionen.