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 从公开仓库中收录这些内容。

举报或申请下架