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
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Recurso activo de Azure Communication Services y una cadena de conexión. Para más información, consulte Creación de un recurso de Azure Communication Services.
- Una instancia de Microsoft Entra con usuarios que tengan licencia de Teams. Para obtener más información, consulte Requisitos de licencia de Teams.
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.
- 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.
- El administrador de Contoso agrega permisos de API a
Teams.ManageCalls
yTeams.ManageChats
desde Communication Services. - El administrador de Contoso permite el flujo de cliente público para la aplicación.
- 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.
- El administrador de Fabrikam concede los permisos
Teams.ManageCalls
yTeams.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 permisosTeams.ManageCalls
yTeams.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 Sí.
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.
- Vaya a la aplicación Microsoft Entra en Azure Portal y seleccione Permisos de API
- Seleccione Agregar permisos.
- En el menú Agregar permisos, seleccione Azure Communication Services.
- Seleccione los permisos Teams.ManageCalls y Teams.ManageChats y, a continuación, seleccione Agregar permisos
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.
Paso 5: Proporcionar consentimiento del administrador
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:
- 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.
- 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:
- Inicie sesión en Azure Portal como administrador.
- Vaya a Microsoft Entra ID.
- En el panel Aplicaciones empresariales, establezca el filtro Tipo de aplicación en Todas las aplicaciones.
- En el campo para filtrar las aplicaciones, escriba el nombre de la aplicación Contoso.
- Seleccione Aplicar.
- Seleccione la entidad de servicio con el nombre necesario.
- 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.
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:
- 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.
- 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:
- Abra el archivo Program.cs en un editor de texto.
- Agregue una directiva
using
para incluir el espacio de nombresAzure.Communication.Identity
. - 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:
Abra un nuevo archivo de texto en el editor de código.
Agregue una llamada
require
para cargar elCommunicationIdentityClient
.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}!`))
Guarde el nuevo archivo como
issue-communication-access-token.js
en el directorioaccess-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
- Python 3.8+.
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
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
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
- Kit de desarrollo de Java (JDK), versión 8 o posterior.
- Apache Maven.
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:
- Vaya al directorio
/src/main/java/com/communication/quickstart
- Abra el archivo
App.java
en un editor. - Reemplace la instrucción
System.out.println("Hello world!");
. - 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:
- El usuario de Fabrikam usa la aplicación cliente de Contoso y se le pide que se autentique.
- 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.
- 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.
- 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.
Creación de un servicio de autenticación de confianza para los usuarios de TeamsRealización de una llamada como usuario de Teams a un usuario de Teams
Más información sobre los siguientes conceptos
- Casos de uso para la comunicación como usuario de Teams
- Azure Communication Services que admiten identidades de Teams
- Interoperabilidad de Teams
- Autenticación de inquilino único y multiinquilino para usuarios de Teams
- Creación y administración de tokens de acceso de comunicación para los usuarios de Teams en una aplicación de página única (SPA)