Share via


Inicio rápido: configuración y administración de tokens de acceso para usuarios de Teams

En este inicio rápido, compilará una aplicación de consola de .NET para autenticar a un usuario de Microsoft 365 mediante la Biblioteca de autenticación de Microsoft (MSAL) y la recuperación de un token de usuario Microsoft Entra. A continuación, intercambiaremos ese token por un token de acceso de usuario de Teams con el SDK de identidad de servicios de Azure Communication Services. A partir de ese momento, el SDK de llamadas de Communication Services puede usar el token de acceso del usuario de Teams para integrar la capacidad para la realización de llamadas como usuario de Teams.

Nota

Cuando se encuentra en un entorno de producción, se recomienda implementar este mecanismo de intercambio en servicios back-end, ya que las solicitudes para un intercambio se firman con un secreto.

Requisitos previos

Introducción

Las identidades de Teams están enlazadas a inquilinos de Microsoft Entra ID. Los usuarios del mismo inquilino o de otro inquilino pueden usar la aplicación. En este inicio rápido, trabajaremos en un caso de uso multiinquilino con varios actores: usuarios, desarrolladores y administradores de las empresas ficticias Contoso y Fabrikam. En este caso de uso, Contoso es una empresa que está creando un software como servicio (SaaS) para Fabrikam.

Las secciones siguientes le guiarán por los pasos para administradores, desarrolladores y usuarios. En los diagramas se muestra el caso de uso de varios inquilinos. Si trabaja con un solo inquilino, ejecute todos los pasos de Contoso y Fabrikam en un solo inquilino.

Acciones de administrador

El rol Administrador tiene permisos extendidos en Microsoft Entra ID. Los miembros de este rol pueden aprovisionar recursos y pueden leer información de Azure Portal. En el diagrama siguiente, puede ver todas las acciones que deben ejecutar los administradores.

Acciones del administrador para habilitar el soporte técnico de Azure Communication Services para las identidades de Teams.

  1. El administrador de Contoso crea o selecciona una aplicación existente en Microsoft Entra ID. La propiedad Tipos de cuenta admitidos define si los usuarios de varios inquilinos se pueden autenticar en la aplicación. La propiedad Identificador URI de redirección redirige una solicitud de autenticación correcta al servidor de Contoso.
  2. El administrador de Contoso agrega permisos de API a Teams.ManageCalls y Teams.ManageChats desde Communication Services.
  3. El administrador de Contoso permite el flujo de cliente público para la aplicación.
  4. El administrador de Contoso crea o selecciona los servicios de comunicación existentes, que se usarán para la autenticación de las solicitudes de intercambio. Los tokens de usuario de Microsoft Entra se intercambiarán por un token de acceso del usuario de Teams. Para más información, consulte Inicio rápido: Creación y administración de recursos de Communication Services.
  5. El administrador de Fabrikam concede los permisos Teams.ManageCalls y Teams.ManageChats de Communication Services a la aplicación Contoso. Este paso es necesario si solo el administrador de Fabrikam puede conceder acceso a la aplicación con los permisos Teams.ManageCalls y Teams.ManageChats.

Paso 1: Crear un registro de aplicación de Microsoft Entra o seleccionar una aplicación de Microsoft Entra

Los usuarios deben autenticarse en las aplicaciones de Microsoft Entra con los permisos Teams.ManageCalls y Teams.ManageChats de Azure Communication Service. Si no tiene una aplicación existente que quiere usar para este inicio rápido, puede crear un registro de aplicación.

La siguiente configuración de la aplicación influye en la experiencia:

  • La propiedad Tipos de cuenta admitidos define si la aplicación es de un solo inquilino ("Solo cuentas de este directorio organizativo") o multiinquilino ("Cuentas de cualquier directorio organizativo"). Para este escenario, puede usar la opción de multiinquilino.
  • El identificador URI de redirección define el identificador URI donde se redirige la solicitud de autenticación después de la autenticación. En este escenario, puede usar Cliente público/nativo (móvil y escritorio) y escribir http://localhost como identificador URI.

Para más información, consulte Registro de una aplicación con la plataforma de identidad de Microsoft.

Cuando la aplicación esté registrada, verá un identificador en la información general. Este identificador, Id. de aplicación (cliente), se usa en los pasos siguientes.

Paso 2: Permitir flujos de clientes públicos

En el panel Autenticación de la aplicación, puede ver la plataforma configurada para Cliente público/nativo (móvil y escritorio) con el identificador URI de redirección que apunta a http://localhost. En la parte inferior del panel, verá el control de alternancia Permitir flujos de cliente públicos, que para este inicio rápido debe establecerse en .

Paso 3: Agregar los permisos de Communication Services a la aplicación

La aplicación debe declarar los permisos Teams.ManageCalls y Teams.ManageChats para tener acceso a las funciones de llamada de Teams en el inquilino. El usuario de Teams solicitaría un token de usuario Microsoft Entra con este permiso para el intercambio de tokens.

  1. Vaya a la aplicación Microsoft Entra en Azure Portal y seleccione Permisos de API
  2. Seleccione Agregar permisos.
  3. En el menú Agregar permisos, seleccione Azure Communication Services.
  4. Seleccione los permisos Teams.ManageCalls y Teams.ManageChats y, a continuación, seleccione Agregar permisos

Agregue el permiso Teams.ManageCalls y Teams.ManageChats a la aplicación Microsoft Entra creada en el paso anterior.

Paso 4: Crear o seleccionar un recurso de Communication Services

El recurso de Communication Services se utiliza para autenticar todas las solicitudes de intercambio de tokens de usuario de Microsoft Entra por tokens de acceso de Teams. Puede desencadenar este intercambio mediante el SDK de Communication Services Identity, que puede autenticar con una clave de acceso o mediante el control de acceso basado en rol (Azure RBAC) de Azure. Puede obtener la clave de acceso en Azure Portal o configurando Azure RBAC en el panel Control de acceso (IAM) mediante el recurso de Communication Services.

Si desea crear un nuevo recurso de Communication Services, consulte Creación y administración de recursos de Communication Services.

Se puede configurar el inquilino de Microsoft Entra para requerir el consentimiento del administrador de Microsoft Entra para los permisos Teams.ManageCalls y Teams.ManageChats de la aplicación. En tal caso, el administrador de Microsoft Entra debe conceder a la aplicación de Contoso los permisos Teams.ManageCalls y Teams.ManageChats de Communication Services. El administrador de Microsoft Entra de Fabrikam proporciona consentimiento mediante una dirección URL única.

Los roles siguientes pueden proporcionar consentimiento en nombre de una empresa:

  • Administrador global
  • Administrador de aplicaciones
  • Administrador de aplicaciones en la nube

Si quiere comprobar los roles en Azure Portal, consulte Enumeración de asignaciones de roles de Azure.

Para construir una dirección URL de consentimiento del administrador, el administrador de Microsoft Entra de Fabrikam hace lo siguiente:

  1. En la dirección URL https://login.microsoftonline.com/{Tenant_ID}/adminconsent?client_id={Application_ID}, el administrador reemplaza {Tenant_ID} por el identificador de inquilino de Fabrikam y {Application_ID} por el identificador de aplicación de Contoso.
  2. El administrador inicia sesión y concede permisos en nombre de la organización.

La entidad de servicio de la aplicación de Contoso en el inquilino de Fabrikam se crea si se concede consentimiento. El administrador de Fabrikam puede revisar el consentimiento en Microsoft Entra ID haciendo lo siguiente:

  1. Inicie sesión en Azure Portal como administrador.
  2. Vaya a Microsoft Entra ID.
  3. En el panel Aplicaciones empresariales, establezca el filtro Tipo de aplicación en Todas las aplicaciones.
  4. En el campo para filtrar las aplicaciones, escriba el nombre de la aplicación Contoso.
  5. Seleccione Aplicar.
  6. Seleccione la entidad de servicio con el nombre necesario.
  7. Vaya al panel Permisos.

Puede ver que el estado de los permisos Teams.ManageCalls y Teams.ManageChats de Communication Services es Concedido para {Nombre_del_directorio}.

Si tiene el problema "La aplicación intenta acceder a un servicio '1fd5118e-2576-4263-8130-9503064c837a'(Azure Communication Services)' para el que su organización {GUID} carece de una entidad de servicio. Póngase en contacto con el administrador de TI para revisar la configuración de las suscripciones de servicio o dar su consentimiento a la aplicación para crear la entidad de servicio necesaria", el inquilino de Microsoft Entra carece de una entidad de servicio para la aplicación de Azure Communication Services. Para corregir este problema, use PowerShell como administrador de Microsoft Entra para conectarse al inquilino. Reemplace Tenant_ID por un id. o por el inquilino de Microsoft Entra.

Necesitará Application.ReadWrite.All como se muestra a continuación.

Captura de pantalla que muestra la aplicación Leer Escribir Todo.

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

Si no se encuentra el comando, inicie PowerShell como administrador e instale el paquete de Microsoft Graph.

Install-Module Microsoft.Graph

A continuación, ejecute el siguiente comando para agregar una entidad de servicio al inquilino. No modifique el GUID del identificador de la aplicación.

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

Acciones para el desarrollador

El desarrollador de Contoso debe configurar la aplicación cliente para la autenticación de usuarios. A continuación, el desarrollador debe crear un punto de conexión en el servidor back-end para procesar el token de usuario de Microsoft Entra después del redireccionamiento. Cuando se recibe un token de usuario de Microsoft Entra, se intercambia por un token de acceso del usuario de Teams y se devuelve a la aplicación cliente.

Las acciones necesarias del desarrollador se muestran en el diagrama siguiente:

Acciones del administrador para habilitar el soporte técnico de Azure Communication Services para las identidades de Teams.

  1. El desarrollador de Contoso configura la biblioteca de autenticación de Microsoft (MSAL) para autenticar al usuario para la aplicación creada anteriormente por el administrador para los permisos Teams.ManageCalls y Teams.ManageChats de Communication Services.
  2. El desarrollador de Contoso inicializa el SDK de Communication Services Identity e intercambia el token de usuario de Microsoft Entra entrante para el token de acceso del usuario de Teams a través del SDK de identidad. A continuación, se devuelve el token de acceso del usuario de Teams a la aplicación cliente.

Al usar la MSAL, los desarrolladores pueden adquirir tokens de usuario de Microsoft Entra desde el punto de conexión de la Plataforma de identidad de Microsoft para autenticar a los usuarios y acceder a las API web protegidas. Se puede usar para proporcionar acceso seguro a Azure Communication Services. MSAL admite muchas arquitecturas y plataformas de aplicación distintas, como .NET, JavaScript, Java, Python, Android e iOS.

Para obtener más información sobre la configuración de entornos en la documentación pública, consulte Introducción a la biblioteca de autenticación de Microsoft.

Nota:

En las secciones siguientes se describe cómo intercambiar el token de acceso de Microsoft Entra por el token de acceso del usuario de Teams para la aplicación de consola.

Configuración de requisitos previos

  • La versión más reciente del SDK de .NET para su sistema operativo.

Código final

Busque el código finalizado de este inicio rápido en GitHub.

Configuración

Creación de una aplicación de C#

En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new para crear una nueva aplicación de consola con el nombre CommunicationAccessTokensQuickstart. Este comando crea un sencillo proyecto "Hola mundo" de C# con un solo archivo de origen: Program.cs.

dotnet new console -o CommunicationAccessTokensQuickstart

Cambie el directorio a la carpeta de la aplicación recién creada y use el comando dotnet build para compilar la aplicación.

cd CommunicationAccessTokensQuickstart
dotnet build

Instalar el paquete

En el directorio de aplicaciones, instale el paquete de la biblioteca de identidades de Azure Communication Services para .NET usando el comando dotnet add package.

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

Instalación del marco de la aplicación

Desde el directorio del proyecto:

  1. Abra el archivo Program.cs en un editor de texto.
  2. Agregue una directiva using para incluir el espacio de nombres Azure.Communication.Identity.
  3. Actualice la declaración del método Main para admitir código asincrónico.

Use el código siguiente para empezar:

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
        }
    }
}

Paso 1: Recibir el identificador de objeto y el token de usuario de Microsoft Entra mediante la biblioteca MSAL

El primer paso del flujo de intercambio de tokens es obtener un token para el usuario de Teams mediante Microsoft.Identity.Client. El código siguiente recupera el id. de cliente de y el id. de inquilino Microsoft Entra a partir de las variables de entorno denominadas AAD_CLIENT_ID y AAD_TENANT_ID. Es esencial configurar el cliente MSAL con la autoridad correcta, en función de la variable de entorno AAD_TENANT_ID, para poder recuperar la notificación de identificador de objeto (oid) correspondiente a un usuario del inquilino de Fabrikam e inicializar la variable userObjectId.

// 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;

Paso 2: Inicializar CommunicationIdentityClient

Inicialice un objeto CommunicationIdentityClient con su cadena de conexión. El código siguiente recupera la cadena de conexión para el recurso de una variable de entorno denominada COMMUNICATION_SERVICES_CONNECTION_STRING. Aprenda a administrar la cadena de conexión del recurso.

Agregue el código siguiente al método 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);

Paso 3: Intercambiar el token de acceso de Microsoft Entra del usuario de Teams por un token de acceso del SDK de identidad de Azure Communication Services

Use el método GetTokenForTeamsUser para emitir un token de acceso para el usuario de Teams que se puede usar con los SDK de Azure Communication Services.

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

Ejecución del código

Ejecute la aplicación desde el directorio de la aplicación con el comando dotnet run.

dotnet run

Configuración de requisitos previos

  • Versiones de Node.js, Active LTS y Maintenance LTS (se recomiendan 8.11.1 y 10.14.1).

Código final

Busque el código finalizado de este inicio rápido en GitHub.

Configuración

Creación de una nueva aplicación Node.js

Abra la ventana de comandos o de terminal, cree un nuevo directorio para la aplicación y navegue hasta este.

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

Ejecute npm init -y para crear un archivo package.json con la configuración predeterminada.

npm init -y

Instalar el paquete

Use el comando npm install para instalar Identity SDK de Azure Communication Services para JavaScript.


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

La opción --save muestra la biblioteca como dependencia en el archivo package.json.

Instalación del marco de la aplicación

Desde el directorio del proyecto:

  1. Abra un nuevo archivo de texto en el editor de código.

  2. Agregue una llamada require para cargar el CommunicationIdentityClient.

  3. Cree la estructura del programa, incluido un control de excepciones básico.

    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. Guarde el nuevo archivo como issue-communication-access-token.js en el directorio access-tokens-quickstart.

Paso 1: Recibir el identificador de objeto y el token de usuario de Microsoft Entra mediante la biblioteca MSAL

El primer paso del flujo de intercambio de tokens es obtener un token para el usuario de Teams mediante Microsoft.Identity.Client. El código siguiente recupera el id. de cliente de y el id. de inquilino Microsoft Entra a partir de las variables de entorno denominadas AAD_CLIENT_ID y AAD_TENANT_ID. Es esencial configurar el cliente MSAL con la autoridad correcta, en función de la variable de entorno AAD_TENANT_ID, para poder recuperar la notificación de identificador de objeto (oid) correspondiente a un usuario del inquilino de Fabrikam e inicializar la variable userObjectId.

// 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);
    });
});

Paso 2: Inicializar CommunicationIdentityClient

Cree una instancia de un objeto CommunicationIdentityClient con su cadena de conexión. El código siguiente recupera la cadena de conexión para el recurso de una variable de entorno denominada COMMUNICATION_SERVICES_CONNECTION_STRING. Aprenda a administrar la cadena de conexión del recurso.

Agregue el código siguiente al método 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);

Paso 3: Intercambiar el token de acceso de Microsoft Entra del usuario de Teams por un token de acceso del SDK de identidad de Azure Communication Services

Use el método getTokenForTeamsUser para emitir un token de acceso para el usuario de Teams que se puede usar con los SDK de Azure Communication Services.

//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);

Ejecución del código

Desde un símbolo del sistema de la consola, vaya al directorio que contiene el archivo issue-communication-access-token.js y, a continuación, ejecute el comando node siguiente para ejecutar la aplicación.

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

Configuración de requisitos previos

Código final

Busque el código finalizado de este inicio rápido en GitHub.

Configuración

Creación de una nueva aplicación de Python

  1. Abra la ventana de comandos o de terminal, cree un nuevo directorio para la aplicación y navegue hasta este.

    mkdir communication-access-tokens-quickstart && cd communication-access-tokens-quickstart
    
  2. Use un editor de texto para crear un archivo denominado exchange-communication-access-tokens.py en el directorio raíz del proyecto y agregue la estructura del programa, incluido el control de excepciones básico. En las secciones siguientes agregará todo el código fuente de esta guía de inicio rápido a este archivo.

    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}")
    

Instalar el paquete

En el directorio de aplicaciones, instale Identity SDK de Azure Communication Services para Python con el comando pip install.

pip install azure-communication-identity
pip install msal

Paso 1: Recibir el identificador de objeto y el token de usuario de Microsoft Entra mediante la biblioteca MSAL

El primer paso del flujo de intercambio de tokens es obtener un token para el usuario de Teams mediante Microsoft.Identity.Client. En Azure Portal, configure el URI de redirección de la "Aplicación móvil y de escritorio" como http://localhost. El código siguiente recupera el id. de cliente de y el id. de inquilino Microsoft Entra a partir de las variables de entorno denominadas AAD_CLIENT_ID y AAD_TENANT_ID. Es esencial configurar el cliente MSAL con la autoridad correcta, en función de la variable de entorno AAD_TENANT_ID, para poder recuperar la notificación de identificador de objeto (oid) correspondiente a un usuario del inquilino de Fabrikam e inicializar la variable user_object_id.

# 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"] 

Paso 2: Inicializar CommunicationIdentityClient

Cree una instancia de un objeto CommunicationIdentityClient con su cadena de conexión. El código siguiente recupera la cadena de conexión para el recurso de una variable de entorno denominada COMMUNICATION_SERVICES_CONNECTION_STRING. Aprenda a administrar la cadena de conexión del recurso.

Agregue este código dentro del bloque try:

# 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)

Paso 3: Intercambiar el token de acceso de Microsoft Entra del usuario de Teams por un token de acceso del SDK de identidad de Azure Communication Services

Use el método get_token_for_teams_user para emitir un token de acceso para el usuario de Teams que se puede usar con los SDK de Azure Communication Services.

# 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)

Ejecución del código

Desde un símbolo del sistema de la consola, vaya al directorio que contiene el archivo exchange-teams-access-tokens.py y ejecute el siguiente comando python para ejecutar la aplicación.

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

Configuración de requisitos previos

Código final

Busque el código finalizado de este inicio rápido en GitHub.

Configuración

Creación de una aplicación Java

Abra el terminal o la ventana de comandos. Vaya al directorio en el que quiere crear la aplicación Java. Ejecute el siguiente comando para generar el proyecto de Java a partir de la plantilla maven-archetype-quickstart.

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

Observará que la tarea "generar" creó un directorio con el mismo nombre que el objeto artifactId. En este directorio, el directorio src/main/java contiene el código fuente del proyecto, el directorio src/test/java directory contiene el origen de la prueba y el archivo pom.xml es el modelo de objetos del proyecto o POM.

Instalar el paquete

Abra el archivo pom.xml en el editor de texto. Agregue los siguientes elementos de dependencia al grupo de dependencias.

<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>

Instalación del marco de la aplicación

Desde el directorio del proyecto:

  1. Vaya al directorio /src/main/java/com/communication/quickstart
  2. Abra el archivo App.java en un editor.
  3. Reemplace la instrucción System.out.println("Hello world!");.
  4. Agregue directivas import.

Use el código siguiente para empezar:

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
    }
}

Paso 1: Recibir el identificador de objeto y el token de usuario de Microsoft Entra mediante la biblioteca MSAL

El primer paso del flujo de intercambio de tokens es obtener un token para el usuario de Teams mediante Microsoft.Identity.Client. Es esencial configurar el cliente MSAL con la autoridad correcta, en función de la variable tenantId, para poder recuperar la notificación de identificador de objeto (oid) correspondiente a un usuario del inquilino de Fabrikam e inicializar la variable userObjectId.

// 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);

Paso 2: Inicializar CommunicationIdentityClient

Cree una instancia de CommunicationIdentityClient con la clave de acceso y el punto de conexión del recurso. Aprenda a administrar la cadena de conexión del recurso. Además, puede inicializar el cliente con cualquier cliente HTTP personalizado que implemente la interfaz com.azure.core.http.HttpClient.

Agregue el código siguiente al método 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();

Paso 3: Intercambiar el token de acceso de Microsoft Entra del usuario de Teams por un token de acceso del SDK de identidad de Azure Communication Services

Use el método getTokenForTeamsUser para emitir un token de acceso para el usuario de Teams que se puede usar con los SDK de Azure Communication Services.

// 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());

Ejecución del código

Navegue hasta el directorio que contiene el archivo pom.xml y compile el proyecto mediante el comando mvn compile.

A continuación, compile el paquete.

mvn package

Ejecute el siguiente comando mvn para ejecutar la aplicación.

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

Acciones del usuario

El usuario representa a los usuarios de Fabrikam de la aplicación de Contoso. La experiencia del usuario se muestra en el diagrama siguiente:

Diagrama de acciones de usuario para habilitar el soporte técnico de Azure Communication Services para las identidades de Teams.

  1. El usuario de Fabrikam usa la aplicación cliente de Contoso y se le pide que se autentique.
  2. La aplicación cliente de Contoso usa la MSAL para autenticar al usuario en el inquilino de Microsoft Entra de Fabrikam para la aplicación de Contoso con los permisos Teams.ManageCalls y Teams.ManageChats de Communication Services.
  3. La autenticación se redirige al servidor, tal como se define en la propiedad Identificador URI de redirección en MSAL y la aplicación de Contoso.
  4. El servidor de Contoso intercambia el token de usuario de Microsoft Entra por el token de acceso del usuario de Teams mediante el SDK de Communication Services Identity y devuelve el token de acceso del usuario de Teams a la aplicación cliente.

Con el token de acceso válido para el usuario de Teams en la aplicación cliente, los desarrolladores pueden integrar el SDK de llamadas de Communication Services y administrar llamadas como usuario de Teams.

Pasos siguientes

En este inicio rápido ha aprendido a:

  • Crear y configurar una aplicación en Microsoft Entra ID.
  • Use la biblioteca de autenticación de Microsoft (MSAL) para emitir un token de usuario de Microsoft Entra.
  • Utilice el SDK de Communication Services Identity para intercambiar el token de usuario de Microsoft Entra por un token de acceso de usuario de Teams.

Más información sobre los siguientes conceptos