Поделиться через


Краткое руководство. Настройка маркеров доступа для пользователей Teams и управление ими

В этом кратком руководстве вы создадите консольное приложение .NET для проверки подлинности пользователя Microsoft 365 с помощью библиотеки проверки подлинности Майкрософт (MSAL) и получения маркера пользователя Microsoft Entra. Затем вы обменяете этим маркером для маркера доступа пользователя Teams с помощью пакета SDK для удостоверений Службы коммуникации Azure. Затем маркер доступа для пользователя Teams можно использовать пакетом SDK для вызовов служб коммуникации для интеграции возможностей вызова в качестве пользователя Teams.

Примечание.

При работе в рабочей среде рекомендуется реализовывать этот механизм обмена во внутренних службах, так как запросы на обмен подписываются с помощью секрета.

Необходимые компоненты

Введение

Удостоверения Teams привязаны к клиентам в идентификаторе Microsoft Entra. С приложением могут работать пользователи из того же или другого клиента. В этом кратком руководстве вы изучите мультитенантный сценарий с несколькими субъектами: пользователями, разработчиками и администраторами из вымышленных компаний Contoso и Fabrikam. В этом случае компания Contoso — это компания, которая создает программное обеспечение как услуга (SaaS) для Fabrikam.

В следующих разделах описаны действия для администраторов, разработчиков и пользователей. На схемах демонстрируется мультитенантный сценарий. Если вы работаете с одним клиентом, выполните все действия компании Contoso и Fabrikam в одном клиенте.

Действия администратора

Роль администратора имеет расширенные разрешения в идентификаторе Microsoft Entra. Члены этой роли могут настраивать ресурсы, а также считывать сведения с портала Azure. На схеме ниже показаны все действия, которые выполняет администратор.

Действия администратора для включения Службы коммуникации Azure поддержки удостоверений Teams.

  1. Администратор Contoso создает или выбирает существующее приложение в идентификаторе Microsoft Entra. Свойство Поддерживаемые типы учетных записей определяет, могут ли пользователи из различных клиентов проходить в этом приложении проверку подлинности. Свойство URI перенаправления перенаправляет успешный запрос проверки подлинности на сервер Contoso.
  2. Администратор Contoso добавляет разрешения API в Teams.ManageCalls службы коммуникации и Teams.ManageChats из нее.
  3. Администратор Contoso разрешает общедоступный клиентский поток для приложения.
  4. Администратор Contoso создает или выбирает существующие службы коммуникации, которые будут использоваться для проверки подлинности запросов на обмен. Маркеры пользователей Microsoft Entra будут обмениваться на маркер доступа пользователя Teams. Дополнительные сведения см. в кратком руководстве по созданию ресурсов Служб коммуникации и управлению ими.
  5. Администратор Fabrikam предоставляет службам Teams.ManageCalls коммуникации и Teams.ManageChats разрешения приложению Contoso. Этот шаг необходим, если только администратор Fabrikam может предоставить доступ к приложению с Teams.ManageCalls разрешениями и Teams.ManageChats разрешениями.

Шаг 1. Создание регистрации приложения Microsoft Entra или выбор приложения Microsoft Entra

Пользователи должны проходить проверку подлинности в приложениях Microsoft Entra с разрешениями Azure Communication Service Teams.ManageCalls и Teams.ManageChats. Если у вас нет приложения, которое вы хотите использовать для этого краткого руководства, можно создать новую регистрацию приложения.

На эти функции влияют следующие параметры приложения:

  • Свойство Поддерживаемые типы учетных записей определяет, является ли приложение однотенантным (учетные записи только в этом каталоге организации) или мультитенантным (учетные записи в каталоге любой организации). В этом сценарии можно использовать мультитенантный вариант.
  • URI перенаправления определяет URI, куда запрос проверки подлинности перенаправляется после проверки. В этом сценарии можно использовать режим Общедоступный/собственный клиент (мобильный и классический) и подставить http://localhost в качестве URI.

Дополнительные сведения см. в статье о регистрации приложения на платформе удостоверений Майкрософт.

При регистрации приложения вы увидите идентификатор в обзоре. Этот идентификатор приложения (клиента) используется в следующих шагах.

Шаг 2. Разрешение потоков общедоступных клиентов

На панели проверки подлинности приложения можно увидеть настроенную платформу для общедоступного клиента или собственного (мобильного и классического компьютера) с указанием URI перенаправленияhttp://localhost. В нижней части панели отображается переключатель Разрешить потоки общедоступных клиентов, который для этого краткого руководства необходимо установить в положение Да.

Шаг 3. Добавление разрешений служб коммуникации в приложение

Приложение должно объявлять разрешения Teams.ManageCalls и Teams.ManageChats, чтобы иметь доступ к возможностям вызова Teams в клиенте. Пользователь Teams запрашивает маркер пользователя Microsoft Entra с этим разрешением для обмена токенами.

  1. Перейдите к приложению Microsoft Entra в портал Azure и выберите разрешения API
  2. Выберите пункт Добавление разрешений.
  3. В меню "Добавить разрешения" выберите Службы коммуникации Azure
  4. Выберите разрешения Teams.ManageCalls и Teams.ManageChats, а затем нажмите кнопку "Добавить разрешения"

Добавьте разрешение Teams.ManageCalls и Teams.ManageChats в приложение Microsoft Entra, созданное на предыдущем шаге.

Шаг 4. Создание или выбор ресурса служб коммуникации

Ресурс Служб коммуникации используется для проверки подлинности всех запросов на обмен маркером пользователя Microsoft Entra для маркера доступа пользователя Teams. Этот обмен можно активировать с помощью пакета SDK для удостоверений служб коммуникации, который можно пройти проверку подлинности с помощью ключа доступа или с помощью управления доступом на основе ролей Azure (Azure RBAC). Ключ доступа можно получить в портал Azure или настроить Azure RBAC на панели управления доступом (IAM) ресурсом Служб коммуникации.

Если вы хотите узнать, как создать ресурс Служб коммуникации, см. статью Создание ресурсов Служб коммуникации и управление ими.

Клиент Microsoft Entra можно настроить, чтобы требовать согласие администратора Microsoft Entra для разрешений Teams.ManageCalls и Teams.ManageChats приложения. В таком случае администратор Microsoft Entra должен предоставить разрешения приложению Contoso для Teams.ManageCalls и Teams.ManageChats. Администратор Microsoft Entra Fabrikam предоставляет согласие с помощью уникального URL-адреса.

Следующие роли могут предоставлять согласие от имени компании:

  • Глобальный администратор
  • Администратор приложений
  • Администратор облачных приложений

Если вы хотите проверить роли в портал Azure, ознакомьтесь со списком назначений ролей Azure.

Чтобы создать URL-адрес согласия администратора, администратор Microsoft Entra Fabrikam выполняет следующие действия:

  1. В URL-адресе https://login.microsoftonline.com/{Tenant_ID}/adminconsent?client_id={Application_ID}администратор заменяет {Tenant_ID} идентификатором клиента Fabrikam и заменяет {Application_ID} идентификатором приложения Contoso.
  2. Войти в систему и предоставить разрешения от имени организации.

Если согласие предоставлено, в клиенте Fabrikam создается субъект-служба приложения Contoso. Администратор Fabrikam может просмотреть согласие в идентификаторе Microsoft Entra, выполнив следующие действия:

  1. Выполните вход на портал Azure в качестве администратора.
  2. Откройте Microsoft Entra ID.
  3. В области Корпоративные приложения выберите в фильтре для типа приложения значение Все приложения.
  4. В поле для фильтрации приложений введите имя приложения Contoso.
  5. Выберите Применить.
  6. Выберите субъект-службу с требуемым именем.
  7. Перейдите в область Разрешения.

Состояние разрешений Teams.ManageCalls и Teams.ManageChats предоставляется для {Directory_name}.

При возникновении проблемы "Приложение пытается получить доступ к службе "1fd5118e-2576-4263-8130-9503064c837a"(Службы коммуникации Azure), для вашей организации "{GUID}" не хватает субъекта-службы. Обратитесь к ИТ-администратору, чтобы просмотреть конфигурацию подписок службы или предоставить приложению согласие на создание требуемого субъекта-службы". Клиент Microsoft Entra не имеет субъекта-службы для приложения Службы коммуникации Azure. Чтобы устранить эту проблему, используйте PowerShell в качестве администратора Microsoft Entra для подключения к клиенту. Замените Tenant_ID идентификатором клиента Microsoft Entra.

Вам потребуется Application.ReadWrite.All , как показано ниже.

Снимок экрана: запись всех приложений.

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

Если команда не найдена, запустите PowerShell от имени администратора и установите пакет Microsoft Graph.

Install-Module Microsoft.Graph

Затем выполните следующую команду, чтобы добавить субъект-службу в клиент. Не изменяйте GUID идентификатора приложения.

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

Действия разработчика

Разработчику компании Contoso необходимо настроить клиентское приложение для проверки подлинности пользователей. Затем разработчику необходимо создать конечную точку на сервере внутреннего сервера , чтобы обработать маркер пользователя Microsoft Entra после перенаправления. После получения маркера пользователя Microsoft Entra он обменивается маркером доступа пользователя Teams и возвращается в клиентское приложение.

Необходимые действия разработчика показаны на следующей схеме.

Схема действий разработчика для включения Службы коммуникации Azure поддержки удостоверений Teams.

  1. Разработчик Contoso настраивает библиотеку проверки подлинности Майкрософт (MSAL) для проверки подлинности пользователя для приложения, созданного ранее администратором Teams.ManageCalls и Teams.ManageChats.
  2. Разработчик Contoso инициализирует пакет SDK удостоверений служб коммуникации и обменивается входящим маркером пользователя Microsoft Entra для маркера доступа пользователя Teams с помощью пакета SDK для удостоверений. Затем маркер доступа пользователя Teams возвращается клиентскому приложению.

С помощью MSAL разработчики могут получать маркеры пользователей Microsoft Entra из конечной точки платформа удостоверений Майкрософт для проверки подлинности пользователей и доступа к безопасным веб-API. Ее можно использовать для обеспечения безопасного доступа к Службам коммуникации. MSAL поддерживает множество различных архитектур приложений и платформ, в том числе .NET, JavaScript, Java, Python, Android и iOS.

Дополнительные сведения о настройке сред в общедоступной документации см. в статье Общие сведения о библиотеке проверки подлинности Майкрософт.

Примечание.

В следующих разделах описывается обмен маркером доступа Microsoft Entra для маркера доступа пользователя Teams для консольного приложения.

Настройка предварительных условий

Окончательный код

Итоговый код для этого краткого руководства можно найти на сайте GitHub.

Настройка

Создание нового приложения C#

В окне консоли (cmd, PowerShell или Bash) выполните команду dotnet new, чтобы создать консольное приложение с именем CommunicationAccessTokensQuickstart. Эта команда создает простой проект "Hello World" на языке C# с одним файлом исходного кода Program.cs.

dotnet new console -o CommunicationAccessTokensQuickstart

Измените каталог на только что созданную папку приложения и выполните команду dotnet build, чтобы скомпилировать приложение.

cd CommunicationAccessTokensQuickstart
dotnet build

Установка пакета

Оставаясь в каталоге приложения, установите пакет библиотеки удостоверений Служб коммуникации Azure для .NET с помощью команды dotnet add package.

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

Настройка платформы приложения

Из каталога проекта:

  1. Откройте файл Program.cs в текстовом редакторе.
  2. Добавьте директиву using для включения пространства имен Azure.Communication.Identity.
  3. Обновите объявление метода Main для поддержки асинхронного кода.

Используйте следующий код:

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

Шаг 1. Получение маркера пользователя и идентификатора объекта Microsoft Entra через библиотеку MSAL

Первый шаг в потоке обмена маркерами — получение маркера для пользователя Teams с помощью Microsoft.Identity.Client. Приведенный ниже код извлекает идентификатор клиента и идентификатор клиента Microsoft Entra из переменных среды с именем AAD_CLIENT_ID и AAD_TENANT_ID. Важно настроить клиент MSAL с правильным центром на основе AAD_TENANT_ID переменной среды, чтобы получить утверждение объекта (oid) соответствующее пользователю в клиенте Fabrikam и инициализировать 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;

Шаг 2. Инициализация CommunicationIdentityClient

Инициализируйте экземпляр CommunicationIdentityClient с использованием строки подключения. Приведенный ниже код извлекает строку подключения для ресурса из переменной среды с именем COMMUNICATION_SERVICES_CONNECTION_STRING. См. сведения о том, как управлять строкой подключения ресурса.

Добавьте указанный ниже код в метод 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);

Шаг 3. Обмен маркером доступа Microsoft Entra пользователя Teams для маркера доступа к удостоверениям связи

Используйте метод GetTokenForTeamsUser, чтобы выдать маркер доступа для пользователя Teams, который можно использовать с пакетами SDK Служб коммуникации Azure.

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

Выполнение кода

Запустите приложение из каталога приложения с помощью команды dotnet run.

dotnet run

Настройка предварительных условий

  • Node.js, активная версия LTS и версия Maintenance LTS (рекомендуются версии 8.11.1 и 10.14.1).

Окончательный код

Итоговый код для этого краткого руководства можно найти на сайте GitHub.

Настройка

Создание нового приложения Node.js

Откройте терминал или командное окно, создайте каталог для своего приложения и перейдите к нему.

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

Выполните команду npm init -y, чтобы создать файл package.json с параметрами по умолчанию.

npm init -y

Установка пакета

Используйте команду npm install, чтобы установить пакет SDK для Служб коммуникации Azure для удостоверений для JavaScript.


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

Параметр --save указывает библиотеку как зависимость в файле пакета package.json.

Настройка платформы приложения

Из каталога проекта:

  1. Откройте новый текстовый файл в редакторе кода.

  2. Добавьте вызов require, чтобы загрузить CommunicationIdentityClient.

  3. Создайте структуру программы, включая простую обработку исключений.

    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. Сохраните новый файл как issue-communication-access-token.js в каталоге access-tokens-quickstart.

Шаг 1. Получение маркера пользователя и идентификатора объекта Microsoft Entra через библиотеку MSAL

Первый шаг в потоке обмена маркерами — получение маркера для пользователя Teams с помощью Microsoft.Identity.Client. Приведенный ниже код извлекает идентификатор клиента и идентификатор клиента Microsoft Entra из переменных среды с именем AAD_CLIENT_ID и AAD_TENANT_ID. Важно настроить клиент MSAL с правильным центром на основе AAD_TENANT_ID переменной среды, чтобы получить утверждение объекта (oid) соответствующее пользователю в клиенте Fabrikam и инициализировать 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);
    });
});

Шаг 2. Инициализация CommunicationIdentityClient

Создайте экземпляр CommunicationIdentityClient с использованием строки подключения. Приведенный ниже код извлекает строку подключения для ресурса из переменной среды с именем COMMUNICATION_SERVICES_CONNECTION_STRING. См. сведения о том, как управлять строкой подключения ресурса.

Добавьте указанный ниже код в метод 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);

Шаг 3. Обмен маркером доступа Microsoft Entra пользователя Teams для маркера доступа к удостоверениям связи

Используйте метод getTokenForTeamsUser, чтобы выдать маркер доступа для пользователя Teams, который можно использовать с пакетами SDK Служб коммуникации Azure.

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

Выполнение кода

В окне консоли перейдите в каталог, содержащий файл issue-communication-access-token.js, а затем выполните команду node, чтобы запустить приложение.

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

Настройка предварительных условий

Окончательный код

Итоговый код для этого краткого руководства можно найти на сайте GitHub.

Настройка

Создание приложения Python

  1. Откройте терминал или командное окно, создайте каталог для своего приложения и перейдите к нему.

    mkdir communication-access-tokens-quickstart && cd communication-access-tokens-quickstart
    
  2. Используйте текстовый редактор, чтобы создать файл с именем exchange-communication-access-tokens.py в корневом каталоге проекта и добавить структуру для программы, включая базовую обработку исключений. В следующих разделах показано, как добавить в этот файл весь исходный код для примера из этого краткого руководства.

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

Установка пакета

Оставаясь в каталоге приложения, установите пакет SDK для удостоверений Служб коммуникации для пакета Python с помощью команды pip install.

pip install azure-communication-identity
pip install msal

Шаг 1. Получение маркера пользователя и идентификатора объекта Microsoft Entra через библиотеку MSAL

Первый шаг в потоке обмена маркерами — получение маркера для пользователя Teams с помощью Microsoft.Identity.Client. В портал Azure настройте универсальный код ресурса (URI перенаправления) приложения "Мобильный и классический" в качествеhttp://localhost. Приведенный ниже код извлекает идентификатор клиента и идентификатор клиента Microsoft Entra из переменных среды с именем AAD_CLIENT_ID и AAD_TENANT_ID. Важно настроить клиент MSAL с правильным центром на основе AAD_TENANT_ID переменной среды, чтобы получить утверждение объекта (oid) соответствующее пользователю в клиенте Fabrikam и инициализировать 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"] 

Шаг 2. Инициализация CommunicationIdentityClient

Создайте экземпляр CommunicationIdentityClient с использованием строки подключения. Приведенный ниже код извлекает строку подключения для ресурса из переменной среды с именем COMMUNICATION_SERVICES_CONNECTION_STRING. См. сведения о том, как управлять строкой подключения ресурса.

Добавьте этот код в блок 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)

Шаг 3. Обмен маркером доступа Microsoft Entra пользователя Teams для маркера доступа к удостоверениям связи

Используйте метод get_token_for_teams_user, чтобы выдать маркер доступа для пользователя Teams, который можно использовать с пакетами SDK Служб коммуникации Azure.

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

Выполнение кода

В окне консоли перейдите в каталог, содержащий файл exchange-teams-access-tokens.py, а затем выполните команду python, чтобы запустить приложение.

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

Настройка предварительных условий

Окончательный код

Итоговый код для этого краткого руководства можно найти на сайте GitHub.

Настройка

Создание нового приложения Java

Откройте терминал или командное окно. Перейдите в каталог, в котором нужно создать приложение Java. Выполните приведенную ниже команду, чтобы создать проект Java из шаблона maven-archetype-quickstart.

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

Вы заметите, что задача generate создала каталог с тем же именем, что и у artifactId. В этом каталоге src/main/java каталог содержит исходный код проекта, src/test/java directory содержит источник теста, а файл pom.xml является объектной моделью проекта или POM.

Установка пакета

Откройте файл pom.xml в текстовом редакторе. Добавьте приведенные ниже элементы зависимости в группу зависимостей.

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

Настройка платформы приложения

Из каталога проекта:

  1. Перейдите в каталог /src/main/java/com/communication/quickstart.
  2. Откройте файл App.java в редакторе.
  3. Замените оператор System.out.println("Hello world!");.
  4. Добавьте директивы import.

Используйте следующий код:

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

Шаг 1. Получение маркера пользователя и идентификатора объекта Microsoft Entra через библиотеку MSAL

Первый шаг в потоке обмена маркерами — получение маркера для пользователя Teams с помощью Microsoft.Identity.Client. Важно настроить клиент MSAL с правильным центром на основе tenantId переменной, чтобы получить утверждение объекта (oid) соответствующее пользователю в клиенте Fabrikam и инициализировать 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);

Шаг 2. Инициализация CommunicationIdentityClient

Создайте экземпляр CommunicationIdentityClient с помощью ключа доступа и конечной точки ресурса. См. сведения о том, как управлять строкой подключения ресурса. Кроме того, вы можете инициализировать клиент с помощью любого пользовательского HTTP-клиента, реализующего интерфейс com.azure.core.http.HttpClient.

Добавьте указанный ниже код в метод 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();

Шаг 3. Обмен маркером доступа Microsoft Entra пользователя Teams для маркера доступа к удостоверениям связи

Используйте метод getTokenForTeamsUser, чтобы выдать маркер доступа для пользователя Teams, который можно использовать с пакетами SDK Служб коммуникации Azure.

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

Выполнение кода

Перейдите в каталог, pom.xml содержащий файл, и скомпилируйте проект с помощью mvn compile команды.

Затем выполните сборку пакета.

mvn package

Выполните следующую команду mvn для запуска приложения.

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

Действия пользователя

Пользователь представляет пользователей Fabrikam приложения Contoso. Интерфейс пользователя показан на следующей схеме:

Схема действий пользователей для включения Службы коммуникации Azure поддержки удостоверений Teams.

  1. Пользователь Fabrikam использует клиентское приложение Contoso и получает запрос на проверку подлинности.
  2. Клиентское приложение Contoso использует MSAL для проверки подлинности пользователя в клиенте Fabrikam Microsoft Entra для приложения Contoso с разрешениями Teams.ManageCalls и Teams.ManageChats.
  3. Проверка подлинности перенаправляется на сервер согласно свойству URI перенаправления в MSAL и в приложении Contoso.
  4. Сервер Contoso обменивается маркером пользователя Microsoft Entra для маркера доступа пользователя Teams с помощью пакета SDK удостоверений служб коммуникации и возвращает маркер доступа пользователя Teams клиентскому приложению.

С допустимым маркером доступа для пользователя Teams в клиентском приложении разработчики могут интегрировать пакет SDK для вызовов служб коммуникации и управлять вызовами в качестве пользователя Teams.

Следующие шаги

Из этого руководства вы узнали, как выполнить следующие действия:

  • Создайте и настройте приложение в идентификаторе Microsoft Entra.
  • Используйте библиотеку проверки подлинности Майкрософт (MSAL) для выдачи маркера пользователя Microsoft Entra.
  • Используйте пакет SDK удостоверений служб коммуникации для обмена маркером пользователя Microsoft Entra для маркера доступа пользователя Teams.

Подробнее изучите следующие концепции.