Delen via


Quickstart: Toegangstokens instellen en beheren voor Teams-gebruikers

In deze quickstart bouwt u een .NET-consoletoepassing om een Microsoft 365-gebruiker te verifiëren met behulp van de Microsoft Authentication Library (MSAL) en een Microsoft Entra-gebruikerstoken op te halen. Vervolgens wisselt u dat token in voor een toegangstoken van Teams-gebruikers met de Azure Communication Services Identity SDK. Het toegangstoken voor Teams-gebruikers kan vervolgens worden gebruikt door de Communication Services Calling SDK om de mogelijkheid voor bellen te integreren als Teams-gebruiker.

Notitie

Wanneer u zich in een productieomgeving bevindt, raden we u aan dit uitwisselingsmechanisme in back-endservices te implementeren, omdat aanvragen voor een uitwisseling zijn ondertekend met een geheim.

Vereisten

Inleiding

Teams-identiteiten zijn gebonden aan tenants in Microsoft Entra-id. Uw toepassing kan worden gebruikt door gebruikers van dezelfde of een andere tenant. In deze quickstart gaat u werken met een multitenant-use-case met meerdere actoren: gebruikers, ontwikkelaars en beheerders van fictieve bedrijven Contoso en Fabrikam. In dit gebruik is Contoso een bedrijf dat Software as a Service (SaaS) bouwt voor Fabrikam.

In de volgende secties wordt u begeleid bij de stappen voor beheerders, ontwikkelaars en gebruikers. In de diagrammen ziet u de use-case voor meerdere tenants. Als u met één tenant werkt, voert u alle stappen van Contoso en Fabrikam uit in één tenant.

Beheerdersacties

De beheerdersrol heeft uitgebreide machtigingen in Microsoft Entra-id. Leden van deze rol kunnen resources instellen en informatie lezen vanuit Azure Portal. In het volgende diagram ziet u alle acties die moeten worden uitgevoerd door beheerders.

Beheerdersacties om Ondersteuning voor Azure Communication Services in te schakelen voor Teams-identiteiten.

  1. De Contoso-beheerder maakt of selecteert een bestaande toepassing in Microsoft Entra-id. Met de eigenschap Ondersteunde accounttypen wordt gedefinieerd of gebruikers van verschillende tenants zich kunnen verifiëren bij de toepassing. Met de omleidings-URI van de eigenschap wordt een geslaagde verificatieaanvraag omgeleid naar de Contoso-server.
  2. De Contoso-beheerder voegt API-machtigingen toe aan Teams.ManageCalls en Teams.ManageChats van Communication Services.
  3. De Contoso-beheerder staat openbare clientstroom voor de toepassing toe.
  4. De Contoso-beheerder maakt of selecteert bestaande communicatieservices, die worden gebruikt voor verificatie van de uitwisselingsaanvragen. Microsoft Entra-gebruikerstokens worden uitgewisseld voor een toegangstoken van Teams-gebruiker. Zie Communication Services-resources maken en beheren voor meer informatie.
  5. De Fabrikam-beheerder verleent Communication Services Teams.ManageCalls en Teams.ManageChats machtigingen aan de Contoso-toepassing. Deze stap is vereist als alleen Fabrikam-beheerder toegang kan verlenen tot de toepassing met de Teams.ManageCalls en Teams.ManageChats machtigingen.

Stap 1: Een Microsoft Entra-toepassingsregistratie maken of een Microsoft Entra-toepassing selecteren

Gebruikers moeten worden geverifieerd voor Microsoft Entra-toepassingen met de machtigingen Azure Communication Service Teams.ManageCalls en Teams.ManageChats. Als u geen bestaande toepassing hebt die u voor deze quickstart wilt gebruiken, kunt u een nieuwe toepassingsregistratie maken.

De volgende toepassingsinstellingen zijn van invloed op de ervaring:

  • De eigenschap Ondersteunde accounttypen bepaalt of de toepassing één tenant is ('Alleen accounts in deze organisatiemap') of meerdere tenants ('Accounts in een organisatiemap'). Voor dit scenario kunt u multitenant gebruiken.
  • Omleidings-URI definieert de URI waarbij de verificatieaanvraag wordt omgeleid na verificatie. Voor dit scenario kunt u openbare client/systeemeigen (mobiel en desktop) gebruiken en invoeren http://localhost als de URI.

Zie Een toepassing registreren bij het Microsoft Identity Platform voor meer informatie.

Wanneer de toepassing is geregistreerd, ziet u een id in het overzicht. Deze id, toepassings-id (client), wordt gebruikt in de volgende stappen.

Stap 2: Openbare clientstromen toestaan

In het deelvenster Verificatie van uw toepassing ziet u een geconfigureerd platform voor openbare client/systeemeigen (mobiel en desktop) met een omleidings-URI die verwijst naar http://localhost. Onder aan het deelvenster ziet u een wisselknop Openbare clientstromen toestaan, die voor deze quickstart moet worden ingesteld op Ja.

Stap 3: De Communication Services-machtigingen toevoegen in de toepassing

De toepassing moet machtigingen voor Teams.ManageCalls en Teams.ManageChats declareren om toegang te hebben tot de belmogelijkheden van Teams in de tenant. Teams-gebruiker vraagt een Microsoft Entra-gebruikerstoken aan met deze machtiging voor tokenuitwisseling.

  1. Navigeer naar uw Microsoft Entra-app in Azure Portal en selecteer API-machtigingen
  2. Machtigingen toevoegen selecteren
  3. Selecteer Azure Communication Services in het menu Machtigingen toevoegen
  4. Selecteer de machtigingen Teams.ManageCalls en Teams.ManageChats en selecteer vervolgens Machtigingen toevoegen

Voeg de machtiging Teams.ManageCalls en Teams.ManageChats toe aan de Microsoft Entra-toepassing die u in de vorige stap hebt gemaakt.

Stap 4: Een Communication Services-resource maken of selecteren

Uw Communication Services-resource wordt gebruikt om alle aanvragen voor het uitwisselen van Microsoft Entra-gebruikerstoken te verifiëren voor een toegangstoken van de Teams-gebruiker. U kunt deze uitwisseling activeren met behulp van de Communication Services Identity SDK, die u kunt verifiëren met een toegangssleutel of met behulp van op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC). U kunt de toegangssleutel ophalen in Azure Portal of door Azure RBAC te configureren in het deelvenster Toegangsbeheer (IAM) door de Communication Services-resource.

Als u een nieuwe Communication Services-resource wilt maken, raadpleegt u Communication Services-resources maken en beheren.

Microsoft Entra-tenant kan worden geconfigureerd, zodat microsoft Entra-beheerderstoestemming is vereist voor de machtigingen Teams.ManageCalls en Teams.ManageChats van de toepassing. In dat geval moet de Microsoft Entra-beheerder machtigingen verlenen aan de Contoso-toepassing voor Communication Services Teams.ManageCalls en Teams.ManageChats. De Fabrikam Microsoft Entra-beheerder geeft toestemming via een unieke URL.

De volgende rollen kunnen namens een bedrijf toestemming geven:

  • Algemene beheerder
  • Toepassingsbeheerder
  • Cloudtoepassingsbeheerder

Als u rollen wilt controleren in Azure Portal, raadpleegt u Azure-roltoewijzingen weergeven.

Als u een BEHEERDERStoestemmings-URL wilt maken, voert de Fabrikam Microsoft Entra-beheerder de volgende stappen uit:

  1. In de URL https://login.microsoftonline.com/{Tenant_ID}/adminconsent?client_id={Application_ID}vervangt de beheerder {Tenant_ID} door de Fabrikam-tenant-id en vervangt {Application_ID} door de Contoso-toepassings-id.
  2. De beheerder meldt zich aan en verleent machtigingen namens de organisatie.

De service-principal van de Contoso-toepassing in de Fabrikam-tenant wordt gemaakt als toestemming wordt verleend. De Fabrikam-beheerder kan de toestemming in Microsoft Entra ID controleren door de volgende stappen uit te voeren:

  1. Meld u als beheerder aan bij de Azure-portal.
  2. Ga naar Microsoft Entra ID.
  3. Stel in het deelvenster Bedrijfstoepassingen het filter Toepassingstype in op Alle toepassingen.
  4. Voer in het veld voor het filteren van de toepassingen de naam van de Contoso-toepassing in.
  5. Selecteer Toepassen.
  6. Selecteer de service-principal met behulp van de vereiste naam.
  7. Ga naar het deelvenster Machtigingen .

U kunt zien dat de status van de machtigingen Communication Services Teams.ManageCalls en Teams.ManageChats is verleend voor {Directory_name}.

Als u het probleem 'De app probeert toegang te krijgen tot een service '1fd5118e-2576-4263-8130-9503064c837a'(Azure Communication Services) waarvoor uw organisatie {GUID} geen service-principal heeft. Neem contact op met uw IT-beheerder om de configuratie van uw serviceabonnementen te controleren of toestemming te geven voor de toepassing om de vereiste service-principal te maken. Uw Microsoft Entra-tenant mist een service-principal voor de Azure Communication Services-toepassing. Als u dit probleem wilt oplossen, gebruikt u PowerShell als Microsoft Entra-beheerder om verbinding te maken met uw tenant. Vervang door Tenant_ID een id van uw Microsoft Entra-tenancy.

U hebt Application.ReadWrite.All nodig, zoals hieronder wordt weergegeven.

Schermopname van Alles voor lezen/schrijven van toepassing.

Connect-MgGraph -TenantId "Tenant_ID" -Scopes Application.ReadWrite.All

Als de opdracht niet wordt gevonden, start u PowerShell als beheerder en installeert u het Microsoft Graph-pakket.

Install-Module Microsoft.Graph

Voer vervolgens de volgende opdracht uit om een service-principal toe te voegen aan uw tenant. Wijzig de GUID van de app-id niet.

New-MgServicePrincipal -AppId "1fd5118e-2576-4263-8130-9503064c837a"

Acties voor ontwikkelaars

De Contoso-ontwikkelaar moet de clienttoepassing instellen om gebruikers te verifiëren. De ontwikkelaar moet vervolgens een eindpunt op de back-endserver maken om het Microsoft Entra-gebruikerstoken te verwerken na omleiding. Wanneer het Microsoft Entra-gebruikerstoken wordt ontvangen, wordt het uitgewisseld voor het toegangstoken van de Teams-gebruiker en geretourneerd naar de clienttoepassing.

De vereiste acties van de ontwikkelaar worden weergegeven in het volgende diagram:

Diagram van ontwikkelaarsacties voor het inschakelen van Ondersteuning voor Azure Communication Services voor Teams-identiteiten.

  1. De Contoso-ontwikkelaar configureert de Microsoft Authentication Library (MSAL) om de gebruiker te verifiëren voor de toepassing die eerder is gemaakt door de beheerder voor Communication Services Teams.ManageCalls en Teams.ManageChats-machtigingen.
  2. De Contoso-ontwikkelaar initialiseert de Communication Services Identity SDK en wisselt het binnenkomende Microsoft Entra-gebruikerstoken uit voor het toegangstoken van de Teams-gebruiker via de identity SDK. Het toegangstoken van de Teams-gebruiker wordt vervolgens geretourneerd naar de clienttoepassing.

Met behulp van MSAL kunnen ontwikkelaars Microsoft Entra-gebruikerstokens verkrijgen van het Microsoft Identity Platform-eindpunt om gebruikers te verifiëren en toegang te krijgen tot beveiligde web-API's. Het kan worden gebruikt om beveiligde toegang tot Communication Services te bieden. MsAL ondersteunt veel verschillende toepassingsarchitecturen en -platforms, waaronder .NET, JavaScript, Java, Python, Android en iOS.

Zie het overzicht van de Microsoft Authentication Library voor meer informatie over het instellen van omgevingen in openbare documentatie.

Notitie

In de volgende secties wordt beschreven hoe u het Microsoft Entra-toegangstoken kunt uitwisselen voor het toegangstoken van de Teams-gebruiker voor de consoletoepassing.

Instellingsvereisten

  • De nieuwste versie van .NET SDK voor uw besturingssysteem.

Uiteindelijke code

Zoek de voltooide code voor deze quickstart op GitHub.

Instellingen

Een nieuwe C#-toepassing maken

Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de opdracht dotnet new om een nieuwe console-app te maken met de naam CommunicationAccessTokensQuickstart. Met deze opdracht maakt u een eenvoudig C#-project Hallo wereld met één bronbestand: Program.cs.

dotnet new console -o CommunicationAccessTokensQuickstart

Wijzig uw map in de zojuist gemaakte app-map en gebruik de opdracht dotnet build om uw toepassing te compileren.

cd CommunicationAccessTokensQuickstart
dotnet build

Het pakket installeren

Installeer in de toepassingsmap de Azure Communication Services Identity-bibliotheek voor het .NET-pakket met behulp van de dotnet add package opdracht.

dotnet add package Azure.Communication.Identity
dotnet add package Microsoft.Identity.Client

Stel het app-framework in

Ga als volgt te werk vanuit de projectmap:

  1. Open het bestand Program.cs in een teksteditor
  2. Voeg een using-instructie toe voor het insluiten van de Azure.Communication.Identity naamruimte
  3. De declaratie van de Main-methode bijwerken ter ondersteuning van async-code

Gebruik de volgende code om te beginnen:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure.Communication.Identity;
using Microsoft.Identity.Client;

namespace CommunicationAccessTokensQuickstart
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Azure Communication Services - Teams Access Tokens Quickstart");

            // Quickstart code goes here
        }
    }
}

Stap 1: het Microsoft Entra-gebruikerstoken en de object-id ontvangen via de MSAL-bibliotheek

De eerste stap in de tokenuitwisselingsstroom is het ophalen van een token voor uw Teams-gebruiker met behulp van Microsoft.Identity.Client. Met de onderstaande code worden de client-id en tenant-id van Microsoft Entra opgehaald uit omgevingsvariabelen met de naam AAD_CLIENT_ID en AAD_TENANT_ID. Het is essentieel om de MSAL-client te configureren met de juiste instantie, op basis van de AAD_TENANT_ID omgevingsvariabele, om de object-id (oid) claim te kunnen ophalen die overeenkomt met een gebruiker in de tenant van Fabrikam en de userObjectId variabele te initialiseren.

// This code demonstrates how to fetch an AAD client ID and tenant ID 
// from an environment variable.
string appId = Environment.GetEnvironmentVariable("AAD_CLIENT_ID");
string tenantId = Environment.GetEnvironmentVariable("AAD_TENANT_ID");
string authority = $"https://login.microsoftonline.com/{tenantId}";
string redirectUri = "http://localhost";

// Create an instance of PublicClientApplication
var aadClient = PublicClientApplicationBuilder
                .Create(appId)
                .WithAuthority(authority)
                .WithRedirectUri(redirectUri)
                .Build();

List<string> scopes = new() {
    "https://auth.msft.communication.azure.com/Teams.ManageCalls",
    "https://auth.msft.communication.azure.com/Teams.ManageChats"
};

// Retrieve the AAD token and object ID of a Teams user
var result = await aadClient
                        .AcquireTokenInteractive(scopes)
                        .ExecuteAsync();
string teamsUserAadToken =  result.AccessToken;
string userObjectId =  result.UniqueId;

Stap 2: De CommunicationIdentityClient initialiseren

Initialiseer een CommunicationIdentityClient met uw verbindingsreeks. Met de onderstaande code wordt de verbindingsreeks voor de resource opgehaald uit een omgevingsvariabele met de naam COMMUNICATION_SERVICES_CONNECTION_STRING. Meer informatie over het beheren van de verbindingsreeks van uw resource.

Voeg de volgende code toe aan de methode Main:

// This code demonstrates how to fetch your connection string
// from an environment variable.
string connectionString = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
var client = new CommunicationIdentityClient(connectionString);

Stap 3: Exchange het Microsoft Entra-toegangstoken van de Teams-gebruiker voor een communicatie-id-toegangstoken

Gebruik de GetTokenForTeamsUser methode om een toegangstoken uit te geven voor de Teams-gebruiker die kan worden gebruikt met de Azure Communication Services SDK's.

var options = new GetTokenForTeamsUserOptions(teamsUserAadToken, appId, userObjectId);
var accessToken = await client.GetTokenForTeamsUserAsync(options);
Console.WriteLine($"Token: {accessToken.Value.Token}");

De code uitvoeren

Voer de toepassing uit vanuit uw toepassingsmap met de opdracht dotnet run.

dotnet run

Instellingsvereisten

  • Node.js, Active LTS en Maintenance LTS-versies (8.11.1 en 10.14.1 aanbevolen).

Uiteindelijke code

Zoek de voltooide code voor deze quickstart op GitHub.

Instellingen

Een nieuwe Node.js-toepassing maken

Open uw terminal of opdrachtvenster, maak een nieuwe map voor uw app en navigeer daar naartoe.

mkdir communication-access-tokens-quickstart && cd communication-access-tokens-quickstart

Voer deze opdracht npm init -y uit om een package.json bestand met standaardinstellingen te maken.

npm init -y

Het pakket installeren

Gebruik de npm install opdracht om de Azure Communication Services Identity SDK voor JavaScript te installeren.


npm install @azure/communication-identity@latest --save
npm install @azure/msal-node --save
npm install express --save
npm install dotenv --save

De optie --save geeft de bibliotheek weer als afhankelijkheid in het package.json-bestand.

Stel het app-framework in

Ga als volgt te werk vanuit de projectmap:

  1. Open een nieuw tekstbestand in uw code-editor

  2. Voeg een require oproep toe om de CommunicationIdentityClient te laden

  3. Maak de structuur voor het programma, waaronder eenvoudige afhandeling van uitzonderingen

    const { CommunicationIdentityClient } = require('@azure/communication-identity');    
    const { PublicClientApplication, CryptoProvider } = require('@azure/msal-node');
    const express = require("express");
    
    // You will need to set environment variables in .env
    const SERVER_PORT = process.env.PORT || 80;
    const REDIRECT_URI = `http://localhost:${SERVER_PORT}/redirect`;
    const clientId = process.env['AAD_CLIENT_ID'];
    const tenantId = process.env['AAD_TENANT_ID'];
    
    // Quickstart code goes here
    
    app.listen(SERVER_PORT, () => console.log(`Communication access token application started on ${SERVER_PORT}!`))
    
    
  4. Sla het nieuwe bestand op zoals issue-communication-access-token.js in de access-tokens-quickstart map.

Stap 1: het Microsoft Entra-gebruikerstoken en de object-id ontvangen via de MSAL-bibliotheek

De eerste stap in de tokenuitwisselingsstroom is het ophalen van een token voor uw Teams-gebruiker met behulp van Microsoft.Identity.Client. Met de onderstaande code worden de client-id en tenant-id van Microsoft Entra opgehaald uit omgevingsvariabelen met de naam AAD_CLIENT_ID en AAD_TENANT_ID. Het is essentieel om de MSAL-client te configureren met de juiste instantie, op basis van de AAD_TENANT_ID omgevingsvariabele, om de object-id (oid) claim te kunnen ophalen die overeenkomt met een gebruiker in de tenant van Fabrikam en de userObjectId variabele te initialiseren.

// Create configuration object that will be passed to MSAL instance on creation.
const msalConfig = {
    auth: {
        clientId: clientId,
        authority: `https://login.microsoftonline.com/${tenantId}`,
    }
};

// Create an instance of PublicClientApplication
const pca = new PublicClientApplication(msalConfig);
const provider = new CryptoProvider();

const app = express();

let pkceVerifier = "";
const scopes = [
            "https://auth.msft.communication.azure.com/Teams.ManageCalls",
            "https://auth.msft.communication.azure.com/Teams.ManageChats"
        ];

app.get('/', async (req, res) => {
    // Generate PKCE Codes before starting the authorization flow
    const {verifier, challenge} = await provider.generatePkceCodes();
    pkceVerifier = verifier;
    
    const authCodeUrlParameters = {
        scopes: scopes,
        redirectUri: REDIRECT_URI,
        codeChallenge: challenge, 
        codeChallengeMethod: "S256"
    };
    // Get url to sign user in and consent to scopes needed for application
    pca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
        res.redirect(response);
    }).catch((error) => console.log(JSON.stringify(error)));
});

app.get('/redirect', async (req, res) => {
    // Create request parameters object for acquiring the AAD token and object ID of a Teams user
    const tokenRequest = {
        code: req.query.code,
        scopes: scopes,
        redirectUri: REDIRECT_URI,
        codeVerifier: pkceVerifier,
    };
    // Retrieve the AAD token and object ID of a Teams user
    pca.acquireTokenByCode(tokenRequest).then(async(response) => {
        console.log("Response:", response);
        let teamsUserAadToken = response.accessToken;
        let userObjectId = response.uniqueId;
        //TODO: the following code snippets go here
        res.sendStatus(200);
    }).catch((error) => {
        console.log(error);
        res.status(500).send(error);
    });
});

Stap 2: De CommunicationIdentityClient initialiseren

Breng een CommunicationIdentityClient tot stand met uw verbindingsreeks. Met de onderstaande code wordt de verbindingsreeks voor de resource opgehaald uit een omgevingsvariabele met de naam COMMUNICATION_SERVICES_CONNECTION_STRING. Meer informatie over het beheren van de verbindingsreeks van uw resource.

Voeg de volgende code toe aan de methode then:

// This code demonstrates how to fetch your connection string
// from an environment variable.
const connectionString = process.env['COMMUNICATION_SERVICES_CONNECTION_STRING'];

// Instantiate the identity client
const identityClient = new CommunicationIdentityClient(connectionString);

Stap 3: Exchange het Microsoft Entra-toegangstoken van de Teams-gebruiker voor een communicatie-id-toegangstoken

Gebruik de getTokenForTeamsUser methode om een toegangstoken uit te geven voor de Teams-gebruiker die kan worden gebruikt met de Azure Communication Services SDK's.

//Exchange the Azure AD access token of the Teams User for a Communication Identity access token
let accessToken = await identityClient.getTokenForTeamsUser({
    teamsUserAadToken: teamsUserAadToken,
    clientId: clientId,
    userObjectId: userObjectId,
  });
console.log("Token:", accessToken);

De code uitvoeren

Navigeer vanuit een consoleprompt naar de map met het issue-communication-access-token.js-bestand en voer vervolgens de volgende node opdracht uit om de app uit te voeren.

node ./issue-communication-access-token.js

Instellingsvereisten

Uiteindelijke code

Zoek de voltooide code voor deze quickstart op GitHub.

Instellingen

Een nieuwe Python-toepassing maken

  1. Open uw terminal of opdrachtvenster, maak een nieuwe map voor uw app en navigeer daar naartoe.

    mkdir communication-access-tokens-quickstart && cd communication-access-tokens-quickstart
    
  2. Gebruik een teksteditor om een bestand te maken dat wordt aangeroepen exchange-communication-access-tokens.py in de hoofdmap van het project en voeg de structuur voor het programma toe, inclusief eenvoudige verwerking van uitzonderingen. In de volgende secties voegt u alle broncode voor deze quickstart toe aan dit bestand.

    import os
    from azure.communication.identity import CommunicationIdentityClient, CommunicationUserIdentifier
    from msal.application import PublicClientApplication
    
    try:
       print("Azure Communication Services - Access Tokens Quickstart")
       # Quickstart code goes here
    except Exception as ex:
       print(f"Exception: {ex}")
    

Het pakket installeren

Terwijl u zich nog in de toepassingsmap bevindt, installeert u het Azure Communication Services Identity SDK voor Python-pakket met behulp van de pip install opdracht.

pip install azure-communication-identity
pip install msal

Stap 1: het Microsoft Entra-gebruikerstoken en de object-id ontvangen via de MSAL-bibliotheek

De eerste stap in de tokenuitwisselingsstroom is het ophalen van een token voor uw Teams-gebruiker met behulp van Microsoft.Identity.Client. Configureer in De Azure-portal de omleidings-URI van uw mobiele en bureaubladtoepassing als http://localhost. Met de onderstaande code worden de client-id en tenant-id van Microsoft Entra opgehaald uit omgevingsvariabelen met de naam AAD_CLIENT_ID en AAD_TENANT_ID. Het is essentieel om de MSAL-client te configureren met de juiste instantie, op basis van de AAD_TENANT_ID omgevingsvariabele, om de object-id (oid) claim te kunnen ophalen die overeenkomt met een gebruiker in de tenant van Fabrikam en de user_object_id variabele te initialiseren.

# This code demonstrates how to fetch your Azure AD client ID and tenant ID
# from an environment variable.
client_id = os.environ["AAD_CLIENT_ID"]
tenant_id = os.environ["AAD_TENANT_ID"]
authority = "https://login.microsoftonline.com/%s" % tenant_id

# Create an instance of PublicClientApplication
app = PublicClientApplication(client_id, authority=authority)

scopes = [ 
"https://auth.msft.communication.azure.com/Teams.ManageCalls",
"https://auth.msft.communication.azure.com/Teams.ManageChats"
 ]

# Retrieve the AAD token and object ID of a Teams user
result = app.acquire_token_interactive(scopes)
aad_token =  result["access_token"]
user_object_id = result["id_token_claims"]["oid"] 

Stap 2: De CommunicationIdentityClient initialiseren

Breng een CommunicationIdentityClient tot stand met uw verbindingsreeks. Met de onderstaande code wordt de verbindingsreeks voor de resource opgehaald uit een omgevingsvariabele met de naam COMMUNICATION_SERVICES_CONNECTION_STRING. Meer informatie over het beheren van de verbindingsreeks van uw resource.

Voeg deze code toe in het try-blok:

# This code demonstrates how to fetch your connection string
# from an environment variable.
connection_string = os.environ["COMMUNICATION_SERVICES_CONNECTION_STRING"]

# Instantiate the identity client
client = CommunicationIdentityClient.from_connection_string(connection_string)

Stap 3: Exchange het Microsoft Entra-toegangstoken van de Teams-gebruiker voor een communicatie-id-toegangstoken

Gebruik de get_token_for_teams_user methode om een toegangstoken uit te geven voor de Teams-gebruiker die kan worden gebruikt met de Azure Communication Services SDK's.

# Exchange the Azure AD access token of the Teams User for a Communication Identity access token
token_result = client.get_token_for_teams_user(aad_token, client_id, user_object_id)
print("Token: " + token_result.token)

De code uitvoeren

Navigeer vanuit een consoleprompt naar de map met het exchange-teams-access-tokens.py-bestand en voer vervolgens de volgende python opdracht uit om de app uit te voeren.

python ./exchange-communication-access-tokens.py

Instellingsvereisten

Uiteindelijke code

Zoek de voltooide code voor deze quickstart op GitHub.

Instellingen

Een nieuwe Java-toepassing maken

Open uw terminal-of opdrachtvenster. Navigeer naar de map waarin u uw Java-toepassing wilt maken. Voer de onderstaande opdracht uit om het Java-project te genereren op basis van de maven-archetype-quickstart sjabloon.

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

U ziet dat de taak ' genereren ' een map heeft gemaakt met dezelfde naam als de artifactId. Onder deze map bevat de src/main/java map de broncode van het project, de bevat de src/test/java directory testbron en het pom.xml bestand is het Project Object Model van het project of POM van het project.

Het pakket installeren

Open het pom.xml bestand in de teksteditor. Voeg de volgende afhankelijkheidselementen toe aan de groep met afhankelijkheden.

<dependencies>
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-communication-identity</artifactId>
        <version>[1.2.0,)</version>
    </dependency>
    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>msal4j</artifactId>
      <version>1.11.0</version>
    </dependency>
</dependencies>

Stel het app-framework in

Ga als volgt te werk vanuit de projectmap:

  1. Ga naar de map /src/main/java/com/communication/quickstart
  2. Open het bestand App.java in de editor
  3. De System.out.println("Hello world!");-instructie vervangen
  4. Voeg import-instructies toe

Gebruik de volgende code om te beginnen:

package com.communication.quickstart;

import com.azure.communication.identity.CommunicationIdentityClient;
import com.azure.communication.identity.CommunicationIdentityClientBuilder;
import com.azure.communication.identity.models.GetTokenForTeamsUserOptions;
import com.azure.core.credential.AccessToken;
import com.microsoft.aad.msal4j.IAuthenticationResult;
import com.microsoft.aad.msal4j.InteractiveRequestParameters;
import com.microsoft.aad.msal4j.PublicClientApplication;

import java.net.URI;
import java.util.HashSet;
import java.util.Set;

public class App
{
    public static void main( String[] args ) throws Exception
    {
        System.out.println("Azure Communication Services - Communication access token Quickstart");
        // Quickstart code goes here
    }
}

Stap 1: het Microsoft Entra-gebruikerstoken en de object-id ontvangen via de MSAL-bibliotheek

De eerste stap in de tokenuitwisselingsstroom is het ophalen van een token voor uw Teams-gebruiker met behulp van Microsoft.Identity.Client. Het is essentieel om de MSAL-client te configureren met de juiste instantie, op basis van de tenantId variabele, om de object-id (oid) claim te kunnen ophalen die overeenkomt met een gebruiker in de tenant van Fabrikam en de userObjectId variabele te initialiseren.

// You need to provide your Azure AD client ID and tenant ID
String appId = "<contoso_application_id>";
String tenantId = "<contoso_tenant_id>";
String authority = "https://login.microsoftonline.com/" + tenantId;

// Create an instance of PublicClientApplication
PublicClientApplication pca = PublicClientApplication.builder(appId)
        .authority(authority)
        .build();

String redirectUri = "http://localhost";
Set<String> scope = new HashSet<String>();
scope.add("https://auth.msft.communication.azure.com/Teams.ManageCalls");
scope.add("https://auth.msft.communication.azure.com/Teams.ManageChats");

// Create an instance of InteractiveRequestParameters for acquiring the AAD token and object ID of a Teams user
InteractiveRequestParameters parameters = InteractiveRequestParameters
                    .builder(new URI(redirectUri))
                    .scopes(scope)
                    .build();

// Retrieve the AAD token and object ID of a Teams user
IAuthenticationResult result = pca.acquireToken(parameters).get();
String teamsUserAadToken = result.accessToken();
String[] accountIds = result.account().homeAccountId().split("\\.");
String userObjectId = accountIds[0];
System.out.println("Teams token: " + teamsUserAadToken);

Stap 2: De CommunicationIdentityClient initialiseren

Instanteer een CommunicationIdentityClient met de toegangssleutel en het eindpunt van uw resource. Meer informatie over het beheren van de verbindingsreeks van uw resource. Daarnaast kunt u de client initialiseren met elke aangepaste HTTP-client waarmee de com.azure.core.http.HttpClient interface wordt geïmplementeerd.

Voeg de volgende code toe aan de methode main:

//You can find your connection string from your resource in the Azure portal
String connectionString = "<connection_string>";

// Instantiate the identity client
CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
    .connectionString(connectionString)
    .buildClient();

Stap 3: Exchange het Microsoft Entra-toegangstoken van de Teams-gebruiker voor een communicatie-id-toegangstoken

Gebruik de getTokenForTeamsUser methode om een toegangstoken uit te geven voor de Teams-gebruiker die kan worden gebruikt met de Azure Communication Services SDK's.

// Exchange the Azure AD access token of the Teams User for a Communication Identity access token
GetTokenForTeamsUserOptions options = new GetTokenForTeamsUserOptions(teamsUserAadToken, appId, userObjectId);
var accessToken = communicationIdentityClient.getTokenForTeamsUser(options);
System.out.println("Token: " + accessToken.getToken());

De code uitvoeren

Navigeer naar de map met het pom.xml bestand en compileer het project met behulp van de mvn compile opdracht.

Bouw vervolgens het pakket.

mvn package

Voer de volgende mvn-opdracht uit om de app uit te voeren.

mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false

Gebruikersacties

De gebruiker vertegenwoordigt de Fabrikam-gebruikers van de Contoso-toepassing. De gebruikerservaring wordt weergegeven in het volgende diagram:

Diagram van gebruikersacties voor het inschakelen van Azure Communication Services-ondersteuning voor Teams-identiteiten.

  1. De Fabrikam-gebruiker gebruikt de Contoso-clienttoepassing en wordt gevraagd om zich te verifiëren.
  2. De Contoso-clienttoepassing gebruikt MSAL om de gebruiker te verifiëren bij de Fabrikam Microsoft Entra-tenant voor de Contoso-toepassing met de machtigingen Communication Services Teams.ManageCalls en Teams.ManageChats.
  3. Verificatie wordt omgeleid naar de server, zoals gedefinieerd in de omleidings-URI van de eigenschap in MSAL en de Contoso-toepassing.
  4. De Contoso-server wisselt het Microsoft Entra-gebruikerstoken uit voor het toegangstoken van teams-gebruiker met behulp van de Communication Services Identity SDK en retourneert het toegangstoken van de Teams-gebruiker naar de clienttoepassing.

Met een geldig toegangstoken voor Teams-gebruikers in de clienttoepassing kunnen ontwikkelaars de Communication Services Calling SDK integreren en gesprekken beheren als Teams-gebruiker.

Volgende stappen

In deze snelstart hebt u de volgende zaken geleerd:

  • Een toepassing maken en configureren in Microsoft Entra-id.
  • Gebruik de Microsoft Authentication Library (MSAL) om een Microsoft Entra-gebruikerstoken uit te geven.
  • Gebruik de Communication Services Identity SDK om het Microsoft Entra-gebruikerstoken uit te wisselen voor een toegangstoken van de Teams-gebruiker.

Meer informatie over de volgende concepten: