Del via


Begrens tilgangen til Microsoft Teams når frontlinjearbeidere er utenfor skift

Oversikt

Arbeidstid er en funksjon som gjør det mulig for administratorer å begrense tilgangen til Microsoft Teams for skiftarbeidere på Android- og iOS-mobilenheter. Disse kontrollene er utformet for bring-your-own-device (BYOD) eller bedriftseide dedikerte enhetsscenarioer for frontlinjearbeidere. Mer informasjon om scenarier for frontlinjeenheter.

Med denne funksjonen kan du blokkere tilgang til Teams eller vise en advarsel når frontlinjearbeidere som er utenfor skift, åpner Teams. Vurder å aktivere arbeidstid for arbeidsstyrken i frontlinjen hvis:

  • Du er bekymret for at frontlinjearbeidere ber om lønn utenfor arbeidstiden hvis de får tilgang til arbeidsapper.
  • Lokale lover og forskrifter krever at du begrenser tilgangen til arbeidsapper når ansatte er utenfor skift.

Slik fungerer det

Når en frontlinjearbeider stempler inn på skiftet og åpner Teams, kontrollerer appen om arbeideren er på eller av skift.

  • Hvis arbeideren er på skift, får de tilgang til Teams.
  • Hvis arbeideren er utenfor skift når Teams er åpen, ser arbeideren en blokk- eller advarselsskjerm.
    • Hvis du har konfigurert en blokkskjerm, får ikke arbeideren tilgang til Teams før de stempler inn på skiftet.
    • Hvis du konfigurerte en advarselsskjerm, kan arbeideren avvise den og velge om han vil bruke Teams etter eget skjønn.
  • Hvis en arbeider bruker Teams mens han stempler ut, ser arbeideren en blokk- eller advarselsskjerm for appen etter at vedkommende stempler ut.

Skjermbilde av skjermbildet for blokktilgang og varselskjermen.

I tillegg til arbeidstid anbefaler vi at du også konfigurerer stilletid til å dempe Teams-varsler automatisk når arbeidere er utenfor skift.

Konfigurere arbeidstid

Følg disse trinnene for å aktivere arbeidstid for frontlinjen.

Konfigurer policyer for appbeskyttelse for Android og iOS

Bruk Microsoft Intune appbeskyttelsespolicyer til å konfigurere arbeidstid for å blokkere eller advare tilgang til Teams på Android- og iOS-enheter. Hvis du vil ha mer informasjon om policyinnstillinger, kan du se:

Koble administrasjonssystemet for arbeidsstyrken (WFM) til API-en for workingTimeSchedule

Opprette et program

  1. Opprett et program i Microsoft Entra for API-en for workingTimeSchedule Graph.

    Når du registrerer programmet, må du sørge for at du velger alternativet Bare forretningsforbindelser i denne organisasjonskatalogen (én enkelt leier), slik at bare brukere i leieren kan bruke programmet. Hvis du vil ha mer informasjon, kan du se Registrere et program med Microsofts identitetsplattform.

  2. Legg til den skjulte programtillatelsen for å kalle Graph-API-en ved hjelp av det nødvendige omfanget. Schedule-WorkingTime.ReadWrite.All

    1. Logg på programmet i Azure Portal.

    2. Gå til Manifest-fanen . Du ser en JSON som inneholder hele definisjonen av programmet.

    3. Legg til requiredResourceAccess egenskapen på slutten av manifestet.

      Denne egenskapen angir settet med tillatelser som programmet krever tilgang til. Den inneholder med andre ord alle API-ene som programmet kan kalle opp. Hvis denne egenskapen allerede finnes i manifestet, har API-en noen tillatelser som allerede er gitt til den.

    4. Legg til et objekt med en ID 00000003-0000-0000-0000-c000-0000000000000000 for i matrisen requiredResourceAccess for å angi tillatelser for Graph-programmet.

      Hvis du allerede har et objekt med samme ID i requiredResourceAccess matrisen, trenger du bare å legge til følgende i matrisen resourceAccess :

      • Et objekt med ID-en til den nye skjulte tillatelsen, 0b21c159-dbf4-4dbb-a6f6-490e412c716e.
      • Tillatelsestypen. I dette tilfellet, Role.

      Her er et eksempel på hvordan slutten 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. Lagre endringene.

Du må være leieradministrator for å utføre dette trinnet.

  1. Gå til https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}& response_type=kode&omfang=https://graph.microsoft.com/.defaulti nettleseren.
  2. Erstatt ClientAppId med app-ID-en i nettadressen.
  3. I dialogboksen for samtykke velger du Godta for å gi administratorsamtykke for hele tenanten til den nye skjulte tillatelsen for programmet.

Kall graph fra programmet

Slik kaller du Graph-endepunkter fra programmet ved hjelp av eksempelkode i C#.

  1. Opprett et nytt konsollprosjekt ved hjelp av .NET 6 eller .NET 7 SDK.

  2. Installer NuGet-pakken Microsoft.Identity.Client .

  3. Åpne program.cs-filen, og kopier og lim inn følgende eksempelkode:

        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. Endre følgende i koden:

    • tenantId: Erstatt med tenant-ID-en.
    • clientId: Erstatt med ID-en for programmet.
    • clientSecret: Du må legge til en klienthemmelighet i godkjenningsdelen av programmet. Du kan også velge å bruke et sikkerhetssertifikat og endre koden tilsvarende.
    • userId: Erstatt med brukeren du vil bruke policyen inWorkingTime eller outOfWorkingTime for.

Konfigurere stilletid

Dette trinnet er valgfritt, men anbefales.

Konfigurer policyer for stilleid i Intune for automatisk å dempe Teams-varsler for frontlinjearbeidere i fritiden. Mer informasjon om hvordan du oppretter stilletidspolicyer.

Vanlige spørsmål

Må jeg bruke Skift-appen i Teams for å dra nytte av denne funksjonen?

Nei, denne funksjonen er avhengig av klokkeinn/ut-signalet fra WFM.

Kan jeg bruke arbeidstiden hvis jeg ikke har et klokke-inn-/ut-system på plass?

Nei, det kreves et klokkeinn-/ut-signal for å bruke denne funksjonen.