Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Communication Services common utilities for Java. Use when working with CommunicationTokenCredential, user identifiers, token refresh, or shared authentication across ACS services.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 165% | 0% |
Shared authentication utilities and data structures for Azure Communication Services.
xml<dependency> <groupId>com.azure</groupId> <artifactId>azure-communication-common</artifactId> <version>1.4.0</version> </dependency>
| Class | Purpose | |-------|---------| | CommunicationTokenCredential | Authenticate users with ACS services | | CommunicationTokenRefreshOptions | Configure automatic token refresh | | CommunicationUserIdentifier | Identify ACS users | | PhoneNumberIdentifier | Identify PSTN phone numbers | | MicrosoftTeamsUserIdentifier | Identify Teams users | | UnknownIdentifier | Generic identifier for unknown types |
javaimport com.azure.communication.common.CommunicationTokenCredential; // Simple static token - no refresh String 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();
javaimport com.azure.communication.common.CommunicationTokenRefreshOptions; import java.util.concurrent.Callable; // Token refresher callback - called when token is about to expire Callable<String> tokenRefresher = () -> { // Call your server to get a fresh token return fetchNewTokenFromServer(); }; // With proactive refresh CommunicationTokenRefreshOptions refreshOptions = new CommunicationTokenRefreshOptions(tokenRefresher) .setRefreshProactively(true) // Refresh before expiry .setInitialToken(currentToken); // Optional initial token CommunicationTokenCredential credential = new CommunicationTokenCredential(refreshOptions);
javaimport java.util.concurrent.CompletableFuture; // Async token fetcher Callable<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);
javaimport com.azure.identity.InteractiveBrowserCredentialBuilder; import com.azure.communication.common.EntraCommunicationTokenCredentialOptions; import java.util.Arrays; import java.util.List; // For Teams Phone Extensibility InteractiveBrowserCredential 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);
javaimport com.azure.communication.common.CommunicationUserIdentifier; // Create identifier for ACS user CommunicationUserIdentifier user = new CommunicationUserIdentifier("8:acs:resource-id_user-id"); // Get raw ID String rawId = user.getId();
javaimport com.azure.communication.common.PhoneNumberIdentifier; // E.164 format phone number PhoneNumberIdentifier phone = new PhoneNumberIdentifier("+14255551234"); String phoneNumber = phone.getPhoneNumber(); // "+14255551234" String rawId = phone.getRawId(); // "4:+14255551234"
javaimport com.azure.communication.common.MicrosoftTeamsUserIdentifier; // Teams user identifier MicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier("<teams-user-id>") .setCloudEnvironment(CommunicationCloudEnvironment.PUBLIC); // For anonymous Teams users MicrosoftTeamsUserIdentifier anonymousTeamsUser = new MicrosoftTeamsUserIdentifier("<teams-user-id>") .setAnonymous(true);
javaimport com.azure.communication.common.UnknownIdentifier; // For identifiers of unknown type UnknownIdentifier unknown = new UnknownIdentifier("some-raw-id");
javaimport com.azure.communication.common.CommunicationIdentifier; import com.azure.communication.common.CommunicationIdentifierModel; // Parse raw ID to appropriate type public 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); } }
javaimport 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()); } }
javaimport com.azure.core.credential.AccessToken; // Get current token (for debugging/logging - don't expose!) CommunicationTokenCredential credential = new CommunicationTokenCredential(token); // Sync access AccessToken accessToken = credential.getToken(); System.out.println("Token expires: " + accessToken.getExpiresAt()); // Async access credential.getTokenAsync() .subscribe(token -> { System.out.println("Token: " + token.getToken().substring(0, 20) + "..."); System.out.println("Expires: " + token.getExpiresAt()); });
java// Clean up when done credential.close(); // Or use try-with-resources try (CommunicationTokenCredential cred = new CommunicationTokenCredential(options)) { // Use credential chatClient.doSomething(); }
javaimport com.azure.communication.common.CommunicationCloudEnvironment; // Available environments CommunicationCloudEnvironment publicCloud = CommunicationCloudEnvironment.PUBLIC; CommunicationCloudEnvironment govCloud = CommunicationCloudEnvironment.GCCH; CommunicationCloudEnvironment dodCloud = CommunicationCloudEnvironment.DOD; // Set on Teams identifier MicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier("<user-id>") .setCloudEnvironment(CommunicationCloudEnvironment.GCCH);
bashAZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.com AZURE_COMMUNICATION_USER_TOKEN=<user-access-token>
setRefreshProactively(true) for long-lived clientsjava// Pattern: Create credential for Chat/Calling client public 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(); }
Other measured skills in the registry, with their headline benchmark lift.