Azure Communication Common Java

作者 microsoft354361d83247MIT收錄於 2026年10月8日更新於 2026年10月8日

Azure Communication Services common utilities for Java. Use when working with CommunicationTokenCredential, user identifiers, token refresh, or shared authentication across ACS services.

精選僅含說明Software Development
AI 產生的概覽

Azure 通訊服務 Java 通用工具參考:權杖認證、重新整理與使用者識別碼。

功能
此技能提供 Azure 通訊服務 Java 通用程式庫(com.azure:azure-communication-common)的參考文件。內容涵蓋以靜態權杖或主動重新整理建立 CommunicationTokenCredential、Entra ID 驗證選項,以及 ACS 使用者、電話號碼、Teams 使用者和未知類型的識別碼類別。也說明識別碼解析、型別判斷、權杖取得、資源釋放與雲端環境設定,並附有程式碼範例。
適用情境
適用於撰寫或審查連接 Azure 通訊服務的 Java 程式碼,例如建置 Chat 或 Calling 用戶端。也適合處理 ACS 使用者存取權杖、權杖重新整理回呼,或將原始識別碼對應到正確識別碼型別的情境。
執行需求
需要 Java 環境與 com.azure:azure-communication-common Maven 相依性(範例為 1.4.0 版),並提供 Azure 通訊服務認證,例如資源端點與使用者存取權杖;Entra ID 情境另需 Azure 身分識別用戶端、租用戶與重新導向 URI。此技能僅為說明文件,不含指令碼。

Azure Communication Common (Java)

Shared authentication utilities and data structures for Azure Communication Services.

Installation

xml
<dependency>    <groupId>com.azure</groupId>    <artifactId>azure-communication-common</artifactId>    <version>1.4.0</version></dependency>

Key Concepts

ClassPurpose
CommunicationTokenCredentialAuthenticate users with ACS services
CommunicationTokenRefreshOptionsConfigure automatic token refresh
CommunicationUserIdentifierIdentify ACS users
PhoneNumberIdentifierIdentify PSTN phone numbers
MicrosoftTeamsUserIdentifierIdentify Teams users
UnknownIdentifierGeneric identifier for unknown types

CommunicationTokenCredential

Static Token (Short-lived Clients)

java
import com.azure.communication.common.CommunicationTokenCredential;
// Simple static token - no refreshString userToken = "<user-access-token>";CommunicationTokenCredential credential = new CommunicationTokenCredential(userToken);
// Use with Chat, Calling, etc.ChatClient chatClient = new ChatClientBuilder()    .endpoint("https://<resource>.communication.azure.com")    .credential(credential)    .buildClient();

Proactive Token Refresh (Long-lived Clients)

java
import com.azure.communication.common.CommunicationTokenRefreshOptions;import java.util.concurrent.Callable;
// Token refresher callback - called when token is about to expireCallable<String> tokenRefresher = () -> {    // Call your server to get a fresh token    return fetchNewTokenFromServer();};
// With proactive refreshCommunicationTokenRefreshOptions refreshOptions = new CommunicationTokenRefreshOptions(tokenRefresher)    .setRefreshProactively(true)      // Refresh before expiry    .setInitialToken(currentToken);    // Optional initial token
CommunicationTokenCredential credential = new CommunicationTokenCredential(refreshOptions);

Async Token Refresh

java
import java.util.concurrent.CompletableFuture;
// Async token fetcherCallable<String> asyncRefresher = () -> {    CompletableFuture<String> future = fetchTokenAsync();    return future.get();  // Block until token is available};
CommunicationTokenRefreshOptions options = new CommunicationTokenRefreshOptions(asyncRefresher)    .setRefreshProactively(true);
CommunicationTokenCredential credential = new CommunicationTokenCredential(options);

Entra ID (Azure AD) Authentication

java
import com.azure.identity.InteractiveBrowserCredentialBuilder;import com.azure.communication.common.EntraCommunicationTokenCredentialOptions;import java.util.Arrays;import java.util.List;
// For Teams Phone ExtensibilityInteractiveBrowserCredential entraCredential = new InteractiveBrowserCredentialBuilder()    .clientId("<your-client-id>")    .tenantId("<your-tenant-id>")    .redirectUrl("<your-redirect-uri>")    .build();
String resourceEndpoint = "https://<resource>.communication.azure.com";List<String> scopes = Arrays.asList(    "https://auth.msft.communication.azure.com/TeamsExtension.ManageCalls");
EntraCommunicationTokenCredentialOptions entraOptions =     new EntraCommunicationTokenCredentialOptions(entraCredential, resourceEndpoint)        .setScopes(scopes);
CommunicationTokenCredential credential = new CommunicationTokenCredential(entraOptions);

Communication Identifiers

CommunicationUserIdentifier

java
import com.azure.communication.common.CommunicationUserIdentifier;
// Create identifier for ACS userCommunicationUserIdentifier user = new CommunicationUserIdentifier("8:acs:resource-id_user-id");
// Get raw IDString rawId = user.getId();

PhoneNumberIdentifier

java
import com.azure.communication.common.PhoneNumberIdentifier;
// E.164 format phone numberPhoneNumberIdentifier phone = new PhoneNumberIdentifier("+14255551234");
String phoneNumber = phone.getPhoneNumber();  // "+14255551234"String rawId = phone.getRawId();              // "4:+14255551234"

MicrosoftTeamsUserIdentifier

java
import com.azure.communication.common.MicrosoftTeamsUserIdentifier;
// Teams user identifierMicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier("<teams-user-id>")    .setCloudEnvironment(CommunicationCloudEnvironment.PUBLIC);
// For anonymous Teams usersMicrosoftTeamsUserIdentifier anonymousTeamsUser = new MicrosoftTeamsUserIdentifier("<teams-user-id>")    .setAnonymous(true);

UnknownIdentifier

java
import com.azure.communication.common.UnknownIdentifier;
// For identifiers of unknown typeUnknownIdentifier unknown = new UnknownIdentifier("some-raw-id");

Identifier Parsing

java
import com.azure.communication.common.CommunicationIdentifier;import com.azure.communication.common.CommunicationIdentifierModel;
// Parse raw ID to appropriate typepublic CommunicationIdentifier parseIdentifier(String rawId) {    if (rawId.startsWith("8:acs:")) {        return new CommunicationUserIdentifier(rawId);    } else if (rawId.startsWith("4:")) {        String phone = rawId.substring(2);        return new PhoneNumberIdentifier(phone);    } else if (rawId.startsWith("8:orgid:")) {        String teamsId = rawId.substring(8);        return new MicrosoftTeamsUserIdentifier(teamsId);    } else {        return new UnknownIdentifier(rawId);    }}

Type Checking Identifiers

java
import com.azure.communication.common.CommunicationIdentifier;
public void processIdentifier(CommunicationIdentifier identifier) {    if (identifier instanceof CommunicationUserIdentifier) {        CommunicationUserIdentifier user = (CommunicationUserIdentifier) identifier;        System.out.println("ACS User: " + user.getId());            } else if (identifier instanceof PhoneNumberIdentifier) {        PhoneNumberIdentifier phone = (PhoneNumberIdentifier) identifier;        System.out.println("Phone: " + phone.getPhoneNumber());            } else if (identifier instanceof MicrosoftTeamsUserIdentifier) {        MicrosoftTeamsUserIdentifier teams = (MicrosoftTeamsUserIdentifier) identifier;        System.out.println("Teams User: " + teams.getUserId());        System.out.println("Anonymous: " + teams.isAnonymous());            } else if (identifier instanceof UnknownIdentifier) {        UnknownIdentifier unknown = (UnknownIdentifier) identifier;        System.out.println("Unknown: " + unknown.getId());    }}

Token Access

java
import com.azure.core.credential.AccessToken;
// Get current token (for debugging/logging - don't expose!)CommunicationTokenCredential credential = new CommunicationTokenCredential(token);
// Sync accessAccessToken accessToken = credential.getToken();System.out.println("Token expires: " + accessToken.getExpiresAt());
// Async accesscredential.getTokenAsync()    .subscribe(token -> {        System.out.println("Token: " + token.getToken().substring(0, 20) + "...");        System.out.println("Expires: " + token.getExpiresAt());    });

Dispose Credential

java
// Clean up when donecredential.close();
// Or use try-with-resourcestry (CommunicationTokenCredential cred = new CommunicationTokenCredential(options)) {    // Use credential    chatClient.doSomething();}

Cloud Environments

java
import com.azure.communication.common.CommunicationCloudEnvironment;
// Available environmentsCommunicationCloudEnvironment publicCloud = CommunicationCloudEnvironment.PUBLIC;CommunicationCloudEnvironment govCloud = CommunicationCloudEnvironment.GCCH;CommunicationCloudEnvironment dodCloud = CommunicationCloudEnvironment.DOD;
// Set on Teams identifierMicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier("<user-id>")    .setCloudEnvironment(CommunicationCloudEnvironment.GCCH);

Environment Variables

bash
AZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.comAZURE_COMMUNICATION_USER_TOKEN=<user-access-token>

Best Practices

  1. Proactive Refresh - Always use setRefreshProactively(true) for long-lived clients
  2. Token Security - Never log or expose full tokens
  3. Close Credentials - Dispose of credentials when no longer needed
  4. Error Handling - Handle token refresh failures gracefully
  5. Identifier Types - Use specific identifier types, not raw strings

Common Usage Patterns

java
// Pattern: Create credential for Chat/Calling clientpublic ChatClient createChatClient(String token, String endpoint) {    CommunicationTokenRefreshOptions refreshOptions =         new CommunicationTokenRefreshOptions(this::refreshToken)            .setRefreshProactively(true)            .setInitialToken(token);        CommunicationTokenCredential credential =         new CommunicationTokenCredential(refreshOptions);        return new ChatClientBuilder()        .endpoint(endpoint)        .credential(credential)        .buildClient();}
private String refreshToken() {    // Call your token endpoint    return tokenService.getNewToken();}

Trigger Phrases

  • "ACS authentication", "communication token credential"
  • "user access token", "token refresh"
  • "CommunicationUserIdentifier", "PhoneNumberIdentifier"
  • "Azure Communication Services authentication"

來源與署名

來源:microsoft/skills位於.github/plugins/azure-sdk-java/skills/azure-communication-common-java提交354361d

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架