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

在本快速入門中,您將建置 .NET 控制台應用程式,以使用 Microsoft 驗證連結庫 (MSAL) 來驗證 Microsoft 365 使用者,並擷取 Microsoft Entra 使用者令牌。 接著,您將使用 Azure 通訊服務 Identity SDK 交換該令牌給 Teams 使用者的存取令牌。 然後,通訊服務通話 SDK 可以使用 Teams 使用者的存取令牌,將通話功能整合為 Teams 使用者。

注意

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

必要條件

簡介

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

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

管理員 istrator 動作

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

管理員 istrator 動作,以啟用 Teams 身分識別 Azure 通訊服務 支援。

  1. Contoso 管理員 istrator 會在 Microsoft Entra ID 中建立或選取現有的應用程式。 [支援帳戶類型] 屬性會定義來自各種租使用者的使用者是否可以向應用程式進行驗證。 重新導向 URI 屬性會將成功的驗證要求重新導向至 Contoso 伺服器
  2. Contoso 管理員 istrator 會在通訊服務中Teams.ManageCalls新增 Teams.ManageChats API 許可權。
  3. Contoso 管理員 istrator 允許應用程式的公用用戶端流程。
  4. Contoso 管理員 istrator 會建立或選取現有的通訊服務,以用於驗證交換要求。 Microsoft Entra 使用者令牌將會交換給 Teams 使用者的存取令牌。 如需詳細資訊,請參閱 建立和管理通訊服務資源
  5. Fabrikam 管理員 istrator 會將通訊服務和Teams.ManageCallsTeams.ManageChats許可權授與 Contoso 應用程式。 如果只有 Fabrikam 管理員 istrator 可以授與具有 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 管理員 istrator 必須將通訊服務 Teams.ManageCalls 和 Teams.ManageChats 的許可權授與 Contoso 應用程式。 Fabrikam Microsoft Entra 管理員 istrator 會透過唯一 URL 提供同意。

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

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

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

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

  1. 在 URL https://login.microsoftonline.com/{Tenant_ID}/adminconsent?client_id={Application_ID}中,管理員 istrator 會以 Fabrikam 租使用者識別碼取代 {Tenant_ID},並將 {Application_ID} 取代為 Contoso 應用程式識別符
  2. 管理員 istrator 會登入並代表組織授與許可權。

如果授與同意,則會建立 Fabrikam 租使用者中 Contoso 應用程式的服務主體。 Fabrikam 管理員 istrator 可以執行下列步驟來檢閱 Microsoft Entra ID 中的同意:

  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}' 缺少服務主體的問題。 請連絡 IT 管理員 以檢閱服務訂用帳戶的設定,或同意應用程式建立所需的服務主體。」您的 Microsoft Entra 租使用者缺少 Azure 通訊服務 應用程式的服務主體。 若要修正此問題,請使用PowerShell作為 Microsoft Entra 系統管理員來聯機到您的租使用者。 以 Microsoft Entra 租用的識別碼取代 Tenant_ID

您將需要 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 許可權 管理員 istrator 所建立之應用程式的使用者。
  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 用戶端識別碼和租使用者標識碼。 請務必根據 AAD_TENANT_ID 環境變數,使用正確的授權單位設定 MSAL 用戶端,以擷取與 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使用 方法,為可與 Azure 通訊服務 SDK 搭配使用的 Teams 用戶發出存取令牌。

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 通訊服務 Identity 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 用戶端識別碼和租使用者標識碼。 請務必根據 AAD_TENANT_ID 環境變數,使用正確的授權單位設定 MSAL 用戶端,以擷取與 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使用 方法,為可與 Azure 通訊服務 SDK 搭配使用的 Teams 用戶發出存取令牌。

//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 用戶端識別碼和租使用者標識碼。 請務必根據 AAD_TENANT_ID 環境變數,使用正確的授權單位設定 MSAL 用戶端,以擷取與 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使用 方法,為可與 Azure 通訊服務 SDK 搭配使用的 Teams 用戶發出存取令牌。

# 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 檔案是專案的 Project 物件模型或 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 。 瞭解如何管理資源的 連接字串。 此外,您可以使用任何自定義 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:交換 Teams 使用者的 Microsoft Entra 存取令牌以取得通訊身分識別存取令牌

getTokenForTeamsUser使用 方法,為可與 Azure 通訊服務 SDK 搭配使用的 Teams 用戶發出存取令牌。

// 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,透過通訊服務 Teams.ManageCalls 和 Teams.ManageChats 許可權,針對 Contoso 應用程式的 Fabrikam Microsoft Entra 租使用者進行驗證。
  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 使用者的存取令牌。

瞭解下列概念: