共用方式為


快速入門:設定和管理 Teams 使用者的存取權杖

在本快速入門中,您將建置一個 .NET 控制台應用程式,透過使用 Microsoft 驗證程式庫 (MSAL) 來驗證 Microsoft 365 使用者,並擷取 Microsoft Entra 使用者權杖。 接著,您將使用 Azure 通訊服務身分識別 SDK 將該權杖交換為 Teams 使用者的存取權杖。 接著,通訊服務通話 SDK 可使用 Teams 使用者的存取權杖,將通話功能整合為 Teams 使用者。

注意

在生產環境時,建議您在後端服務中實作此交換機制,因為交換的要求會以秘密簽署。

必要條件

簡介

Teams 身分識別會繫結至 Microsoft Entra ID 中的租用戶。 您的應用程式可供來自相同租用戶或另一個租用戶的使用者使用。 在本快速入門中,您將了解包含多個執行者的多租用戶使用案例:來自虛構公司 Contoso 和 Fabrikam 的使用者、開發人員和管理員。 在此使用案例中,Contoso 是一家為 Fabrikam 建置軟體即服務 (SaaS) 的公司。

下列各節將引導您完成管理員、開發人員和使用者的步驟。 圖表會展示多租用戶使用案例。 如果您使用單一租用戶,請在單一租用戶中執行 Contoso 和 Fabrikam 的所有步驟。

管理員動作

管理員角色具有 Microsoft Entra ID 中的擴充權限。 此角色的成員可以設定資源,並可從 Azure 入口網站讀取資訊。 在下圖中,您可以看到管理員必須執行的所有動作。

啟用 Teams 身分識別 Azure 通訊服務 支援的系統管理員動作。

  1. Contoso 管理員會在 Microsoft Entra ID 中建立或選取現有的應用程式。 「支援的帳戶類型」屬性會定義各種租用戶的使用者是否可以向應用程式進行驗證。 「重新導向 URI」屬性會將成功的驗證要求重新導向至 Contoso 伺服器
  2. Contoso 管理員會新增對通訊服務中 Teams.ManageCallsTeams.ManageChats 的 API 權限。
  3. Contoso 管理員允許應用程式的公用用戶端流程。
  4. Contoso 管理員會建立或選取現有的通訊服務,以用於驗證交換要求。 Microsoft Entra 使用者權杖會交換為 Teams 使用者的存取權杖。 如需詳細資訊,請參閱建立和管理通訊服務資源
  5. Fabrikam 管理員會將通訊服務 Teams.ManageCallsTeams.ManageChats 權限授與 Contoso 應用程式。 只有當 Fabrikam 管理員可使用 Teams.ManageCallsTeams.ManageChats 權限來授與應用程式的存取權時,才需要此步驟。

步驟 1:建立 Microsoft Entra 應用程式註冊,或選取 Microsoft Entra 應用程式

使用者必須使用 Azure 通訊服務 Teams.ManageCalls 和 Teams.ManageChats 權限,對 Microsoft Entra 應用程式進行驗證。 如果您尚無想在本快速入門使用的現有應用程式,您可以建立新的應用程式註冊。

下列應用程式設定會影響體驗:

  • 「支援的帳戶類型」屬性會定義應用程式是否為單一租用戶 (「僅限此組織目錄中的帳戶」) 或多租用戶 (「任何組織目錄中的帳戶」)。 在此案例中,您可以使用多租用戶。
  • 「重新導向 URI」會定義驗證要求在驗證之後重新導向的 URI。 在此案例中,您可以使用公開用戶端/原生 (行動裝置和桌面版),並輸入 http://localhost 作為 URI。

如需更詳細的資訊,請參閱使用 Microsoft 身分識別平台註冊應用程式

註冊應用程式時,您會在概觀中看到識別碼。 後續步驟會使用此識別碼,即「應用程式 (用戶端) 識別碼」

步驟 2:允許公用用戶端流程

在應用程式的 [驗證] 窗格中,您可以看到「公開用戶端/原生 (行動裝置和桌面版)」的已設定平台,且重新導向 URI 指向 http://localhost。 在窗格底部,您會看到 [允許公用用戶端流程] 切換控制項,在本快速入門應設定為 [是]

步驟 3:在應用程式中新增通訊服務權限

應用程式必須宣告 Teams.ManageCalls 和 Teams.ManageChats 權限,才能存取租用戶中的 Teams 通話功能。 Teams 使用者會要求具有此權限的 Microsoft Entra 使用者權杖以進行權杖交換。

  1. 在 Azure 入口網站中瀏覽至您的 Microsoft Entra 應用程式,然後選取 [API 權限]
  2. 選取 [新增權限]
  3. 在 [新增權限] 功能表中,選取 [Azure 通訊服務]
  4. 選取 Teams.ManageCallsTeams.ManageChats 權限,然後選取 [新增權限]

將 Teams.ManageCalls 和 Teams.ManageChats 許可權新增至上一個步驟中建立的 Microsoft Entra 應用程式。

步驟 4:建立或選取通訊服務資源

您的通訊服務資源可用來驗證將 Microsoft Entra 使用者權杖交換為 Teams 使用者存取權杖的所有要求。 您可以使用通訊服務識別 SDK 觸發此交換,並使用存取密鑰或 Azure 角色型存取控制 (Azure RBAC) 進行驗證。 存取密鑰可以在 Azure 入口網站中取得,或透過通訊服務資源在 [存取控制 (IAM)] 窗格上設定 Azure RBAC 來取得。

如果您想要建立新的通訊服務資源,請參閱建立和管理通訊服務資源

您可以設定 Microsoft Entra 租用戶,要求 Microsoft Entra 管理員同意應用程式的 Teams.ManageCalls 和 Teams.ManageChats 權限。 在這種情況下,Microsoft Entra Administrator 必須將通訊服務 Teams.ManageCalls 和 Teams.ManageChats 的權限授與 Contoso 應用程式。 Fabrikam Microsoft Entra 管理員會透過唯一 URL 提供同意。

下列角色可以代表公司提供同意:

  • 全域管理員
  • 應用程式管理員
  • 雲端應用程式管理員

如果您想要在 Azure 入口網站中檢查角色,請參閱列出 Azure 角色指派

為了建構管理員同意 URL,Fabrikam Microsoft Entra 管理員會執行下列步驟:

  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 ID 中檢閱同意:

  1. 以系統管理員身分登入 Azure 入口網站。
  2. 移至 Microsoft Entra ID。
  3. 在 [企業應用程式] 窗格中,將 [應用程式類型] 篩選條件設定為 [所有應用程式]
  4. 在篩選應用程式的欄位中,輸入 Contoso 應用程式的名稱。
  5. 選取套用
  6. 使用必要的名稱選取服務主體。
  7. 移至 [權限] 窗格。

您可以看到通訊服務 Teams.ManageCalls 和 Teams.ManageChats 權限的狀態為「已授與 {Directory_name}」

如果您遇到此問題:「應用程式嘗試存取貴組織 '{GUID}' 缺少服務主體的服務 '1fd5118e-2576-4263-8130-9503064c837a'(Azure 通訊服務)。 請連絡 IT 管理員以檢閱服務訂用帳戶的設定,或同意應用程式建立所需的服務主體。」表示您的 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 使用者的存取權杖,並傳回用戶端應用程式

下圖顯示開發人員的必要動作:

啟用 Teams 身分識別 Azure 通訊服務 支援的開發人員動作圖表。

  1. Contoso 開發人員會設定 Microsoft 驗證程式庫 (MSAL) 以驗證先前由通訊服務管理員 Teams.ManageCalls 和 Teams.ManageChats 權限所建立的應用程式使用者。
  2. Contoso 開發人員會初始化通訊服務識別 SDK,並透過身分識別 SDK 交換傳入的 Microsoft Entra 使用者權杖,以取得 Teams 使用者的存取權杖。 Teams 使用者的存取權杖接著會傳回用戶端應用程式

開發人員可以使用 MSAL 從 Microsoft 身分識別平台端點取得 Microsoft Entra 使用者權杖,以驗證使用者並存取安全的 Web API, 可用來提供通訊服務的安全存取。 MSAL 支援許多不同的應用程式架構和平台,包括 .NET、JavaScript、JAVA、Python、Android 和 iOS。

如需公用文件中關於設定環境的詳細資訊,請參閱Microsoft 驗證程式庫概觀

注意

下列各節說明如何將 Microsoft Entra 存取權杖交換為控制台應用程式的 Teams 使用者存取權杖。

設定必要條件

  • 適用於您的作業系統的最新版本 .NET SDK

最終程式碼

GitHub 上找到此快速入門的完成程式碼。

設定

建立新的 C# 應用程式

在主控台視窗中 (例如 cmd、PowerShell 或 Bash),使用 dotnet new 命令建立名為 CommunicationAccessTokensQuickstart 的新主控台應用程式。 此命令會建立簡單的 "Hello World" C# 專案,內含單一原始程式檔:Program.cs

dotnet new console -o CommunicationAccessTokensQuickstart

將您的目錄變更為新建立的應用程式資料夾,然後使用 dotnet build 命令來編譯您的應用程式。

cd CommunicationAccessTokensQuickstart
dotnet build

Install the package

在仍位於應用程式目錄時,使用 dotnet add package 命令安裝適用於 .NET 套件的 Azure 通訊服務識別程式庫。

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:透過 MSAL 程式庫接收 Microsoft Entra 使用者權杖和物件識別碼

權杖交換流程的第一個步驟是使用 Microsoft.Identity.Client 為您的 Teams 使用者取得權杖。 下列程式碼會從名為 AAD_CLIENT_IDAAD_TENANT_ID 的環境變數擷取 Microsoft Entra 用戶端識別碼和租用戶識別碼。 請務必使用正確的授權單位設定 MSAL 用戶端 (根據 AAD_TENANT_ID 環境變數),以擷取與 Fabrikam 租用戶中使用者對應的物件識別碼 (oid) 宣告,並初始化 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:將 Teams 使用者的 Microsoft Entra 存取權杖換成通訊身分識別存取權杖

請使用 GetTokenForTeamsUser 方法為 Teams 使用者核發可與 Azure 通訊服務 SDK 搭配使用的存取權杖。

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 和維修 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

Install the package

使用 npm install 命令安裝適用於 JavaScript 的 Azure 通訊服務識別 SDK。


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:透過 MSAL 程式庫接收 Microsoft Entra 使用者權杖和物件識別碼

權杖交換流程的第一個步驟是使用 Microsoft.Identity.Client 為您的 Teams 使用者取得權杖。 下列程式碼會從名為 AAD_CLIENT_IDAAD_TENANT_ID 的環境變數擷取 Microsoft Entra 用戶端識別碼和租用戶識別碼。 請務必使用正確的授權單位設定 MSAL 用戶端 (根據 AAD_TENANT_ID 環境變數),以擷取與 Fabrikam 租用戶中使用者對應的物件識別碼 (oid) 宣告,並初始化 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:將 Teams 使用者的 Microsoft Entra 存取權杖換成通訊身分識別存取權杖

請使用 getTokenForTeamsUser 方法為 Teams 使用者核發可與 Azure 通訊服務 SDK 搭配使用的存取權杖。

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

Install the package

在應用程式目錄中,繼續使用 pip install 命令安裝適用於 Python 套件的 Azure 通訊服務識別 SDK。

pip install azure-communication-identity
pip install msal

步驟 1:透過 MSAL 程式庫接收 Microsoft Entra 使用者權杖和物件識別碼

權杖交換流程的第一個步驟是使用 Microsoft.Identity.Client 為您的 Teams 使用者取得權杖。 在 Azure 入口網站中,將「行動裝置與傳統型應用程式」的重新導向 URI 設定為 http://localhost。 下列程式碼會從名為 AAD_CLIENT_IDAAD_TENANT_ID 的環境變數擷取 Microsoft Entra 用戶端識別碼和租用戶識別碼。 請務必使用正確的授權單位設定 MSAL 用戶端 (根據 AAD_TENANT_ID 環境變數),以擷取與 Fabrikam 租用戶中使用者對應的物件識別碼 (oid) 宣告,並初始化 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:將 Teams 使用者的 Microsoft Entra 存取權杖換成通訊身分識別存取權杖

請使用 get_token_for_teams_user 方法為 Teams 使用者核發可與 Azure 通訊服務 SDK 搭配使用的存取權杖。

# 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 應用程式的目錄。 執行下列命令以從 maven-archetype-quickstart 範本產生 Java 專案。

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

Install the package

在文字編輯器中開啟 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:透過 MSAL 程式庫接收 Microsoft Entra 使用者權杖和物件識別碼

權杖交換流程的第一個步驟是使用 Microsoft.Identity.Client 為您的 Teams 使用者取得權杖。 請務必使用正確的授權單位設定 MSAL 用戶端 (根據 tenantId 變數),以擷取與 Fabrikam 租用戶中使用者對應的物件識別碼 (oid) 宣告,並初始化 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 具現化。 了解如何管理您資源的連接字串。 您可以使用會實作 com.azure.core.http.HttpClient 介面的任何自訂 HTTP 用戶端來初始化用戶端。

將下列程式碼加入 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:將 Teams 使用者的 Microsoft Entra 存取權杖換成通訊身分識別存取權杖

請使用 getTokenForTeamsUser 方法為 Teams 使用者核發可與 Azure 通訊服務 SDK 搭配使用的存取權杖。

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

使用者動作

使用者代表 Contoso 應用程式的 Fabrikam 使用者。 使用者體驗如下圖所示:

啟用 Teams 身分識別 Azure 通訊服務 支援的使用者動作圖表。

  1. Fabrikam 使用者會使用 Contoso 用戶端應用程式,且系統將提示其進行驗證。
  2. Contoso 用戶端應用程式會使用 MSAL 向 Fabrikam Microsoft Entra 租用戶驗證使用者,使 Contoso 應用程式取得通訊服務 Teams.ManageCalls 和 Teams.ManageChats 權限。
  3. 驗證會重新導向至伺服器,如 MSAL 和 Contoso 應用程式中的重新導向 URI 屬性所定義。
  4. Contoso 伺服器會使用通訊服務識別 SDK,將 Microsoft Entra 使用者權杖交換為 Teams 使用者的存取權杖,並將 Teams 使用者的存取權杖傳回用戶端應用程式

透過用戶端應用程式中 Teams 使用者的有效存取權杖,開發人員可以整合通訊服務通話 SDK,並以 Teams 使用者身分管理通話。

下一步

在本快速入門中,您已了解如何:

  • 在 Microsoft Entra ID 中建立和設定應用程式。
  • 使用 Microsoft 驗證程式庫 (MSAL) 核發 Microsoft Entra 使用者權杖。
  • 使用通訊服務識別 SDK 將 Microsoft Entra 使用者權杖,交換為 Teams 使用者的存取權杖。

了解下列概念: