Azure Communication JavaScript için Common client library - sürüm 2.5.0

Bu paket, Azure İletişim Hizmeti kitaplıkları için ortak kod içerir.

Başlangıç Yapmak

Önkoşullar

Yükleniyor

npm install @azure/communication-common
npm install @azure/identity

Tarayıcı desteği

JavaScript Paketi

Bu istemci kitaplığını tarayıcıda kullanmak için önce bir paketleyici kullanmanız gerekir. Bunun nasıl yapılacağının ayrıntıları için lütfenpaketleme belgelerimize bakın.

Temel kavramlar

CommunicationTokenCredential ve AzureCommunicationTokenCredential

Sohbet CommunicationTokenCredential veya Arama gibi İletişim Hizmetleri ile bir kullanıcının kimliğini doğrulamak için kullanılan bir arabirimdir.

Söz AzureCommunicationTokenCredential konusu arayüzü uygulayan bir kimlik bilgisi oluşturmak için uygun bir yol sunar ve yerleşik otomatik yenileme mantığından yararlanmanıza olanak tanır.

Senaryonuza bağlı olarak, ile başlatmak AzureCommunicationTokenCredential isteyebilirsiniz:

  • statik bir belirteç (örneğin tek seferlik Sohbet mesajları göndermek için kullanılan kısa ömürlü istemciler için uygundur) veya
  • iletişim sırasında sürekli bir kimlik doğrulama durumu sağlayan bir geri arama işlevi (örneğin, uzun Arama oturumları için idealdir).
  • bir Entra kullanıcı belirteci alabilen bir belirteç kimlik bilgisi. TokenCredential arabiriminin herhangi bir uygulamasını sağlayabilirsiniz. İletişim Hizmetleri ile kimlik doğrulaması yapmak için Entra kullanıcı erişim belirteçlerinin gerekli olduğu senaryolar için uygundur.

Oluşturucu aracılığıyla veya belirteç yenileyici geri araması aracılığıyla sağlanan AzureCommunicationTokenCredential belirteçler, Azure İletişim Kimliği kitaplığı kullanılarak elde edilebilir.

Örnekler

Statik belirteçle kimlik bilgisi oluşturma

Kısa ömürlü istemciler için, süresi dolduktan sonra belirtecin yenilenmesi gerekli değildir ve AzureCommunicationTokenCredential statik bir belirteçle başlatılabilir.

import { AzureCommunicationTokenCredential } from "@azure/communication-common";

const tokenCredential = new AzureCommunicationTokenCredential(
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjM2MDB9.adM-ddBZZlQ1WlN3pdPBOF5G4Wh9iZpxNP_fSvpF4cWs",
);

Geri arama ile kimlik bilgisi oluşturma

Burada, bir kullanıcı için bir JWT belirteç dizesi almak için bir ağ isteğinde bulunan bir işlevimiz fetchTokenFromMyServerForUser olduğunu varsayıyoruz. Kendi sunucumuzdan Bob için bir belirteç almak için bunu kimlik bilgisine geçiririz. Sunucumuz belirteç vermek için Azure İletişim Kimliği kitaplığını kullanır. İşlevin fetchTokenFromMyServerForUser her zaman geçerli bir belirteç (gelecekte ayarlanmış bir sona erme tarihi olan) döndürmesi gerekir.

import { AzureCommunicationTokenCredential } from "@azure/communication-common";

function fetchTokenFromMyServerForUser(user: string): Promise<string> {
  // Your custom implementation to fetch a token for the user
  return Promise.resolve("some-unique-token-for-" + user);
}

const tokenCredential = new AzureCommunicationTokenCredential({
  tokenRefresher: async () => fetchTokenFromMyServerForUser("bob@contoso.com"),
});

Proaktif yenileme ile kimlik bilgisi oluşturma

true olarak ayarlamak refreshProactively , belirtecin süresi dolmak üzere olduğunda işlevinizi tokenRefresher çağırır.

import { AzureCommunicationTokenCredential } from "@azure/communication-common";

function fetchTokenFromMyServerForUser(user: string): Promise<string> {
  // Your custom implementation to fetch a token for the user
  return Promise.resolve("some-unique-token-for-" + user);
}

const tokenCredential = new AzureCommunicationTokenCredential({
  tokenRefresher: async () => fetchTokenFromMyServerForUser("bob@contoso.com"),
  refreshProactively: true,
});

Proaktif yenileme ve ilk belirteç ile bir kimlik bilgisi oluşturun

Geçme initialToken , öğesine yapılan ilk çağrıyı atlamak tokenRefresheriçin isteğe bağlı bir iyileştirmedir. Bunu, uygulamanızdan önyüklemeyi sonraki belirteç yenileme döngülerinden ayırmak için kullanabilirsiniz.

import { AzureCommunicationTokenCredential } from "@azure/communication-common";

function fetchTokenFromMyServerForUser(user: string): Promise<string> {
  // Your custom implementation to fetch a token for the user
  return Promise.resolve("some-unique-token-for-" + user);
}

const tokenCredential = new AzureCommunicationTokenCredential({
  tokenRefresher: async () => fetchTokenFromMyServerForUser("bob@contoso.com"),
  refreshProactively: true,
  token:
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjM2MDB9.adM-ddBZZlQ1WlN3pdPBOF5G4Wh9iZpxNP_fSvpF4cWs",
});

Şifreli veya opak bir erişim belirteci için bir kimlik bilgisi oluşturun

Bazı erişim tokenları — örneğin kurumsal Entra kullanıcılarına verilenler — şifrelenmiştir ve istemci üzerinde çözülemez, bu yüzden kimlik bilgileri onların son kullanma tarihini okuyamaz. Önerilen yaklaşım AccessToken , belirten yanıtından expires_inbir ({ token, expiresOnTimestamp }) tokenRefresher döndürmek (veya birini ilk olarak tokengeçmek) ayarından expiresOnTimestamp döndürmektir. Bu, proaktif yenileme planlamasının doğru olmasını sağlar.

import { AzureCommunicationTokenCredential } from "@azure/communication-common";

// Some access tokens (e.g. for enterprise Entra users) are encrypted and cannot be
// decoded on the client. Return an AccessToken with an explicit expiry so proactive
// refresh scheduling stays accurate; derive expiresOnTimestamp from the response's expires_in.
async function fetchEncryptedTokenForUser(user: string): Promise<{
  token: string;
  expiresOnTimestamp: number;
}> {
  const response = { token: "some-encrypted-token-for-" + user, expiresInSeconds: 8 * 60 * 60 };
  return {
    token: response.token,
    expiresOnTimestamp: Date.now() + response.expiresInSeconds * 1000,
  };
}

const tokenCredential = new AzureCommunicationTokenCredential({
  tokenRefresher: async () => fetchEncryptedTokenForUser("bob@contoso.com"),
  refreshProactively: true,
});

Sadece token dizisi sağlayabiliyorsan, kimlik bilgileri bunu kabul eder ve bir yedek ömür varsayar. undecodableTokenExpiryIntervalInSeconds Tokenlarınızın gerçek ömrüne ayarlayın, böylece gerekenden fazla yenilenmesinler; varsayılan olarak 600 saniyedir.

import { AzureCommunicationTokenCredential } from "@azure/communication-common";

function fetchOpaqueTokenForUser(user: string): Promise<string> {
  // Your custom implementation returns an opaque token string that can't be decoded.
  return Promise.resolve("some-opaque-token-for-" + user);
}

const tokenCredential = new AzureCommunicationTokenCredential({
  tokenRefresher: async () => fetchOpaqueTokenForUser("bob@contoso.com"),
  refreshProactively: true,
  // When the token can't be decoded and no explicit expiry is provided, assume this
  // lifetime (in seconds) instead of the 600s default — set it to your tokens' real lifetime.
  undecodableTokenExpiryIntervalInSeconds: 3600,
});

Entra kullanıcı belirteci alabilen bir belirteç kimlik bilgisine sahip bir kimlik bilgisi oluşturun

Bir Entra kullanıcısının İletişim Hizmetleri ile kullanılabileceği senaryolar için, TokenCredential arabiriminin herhangi bir uygulamasını başlatmanız ve .EntraCommunicationTokenCredentialOptions Bununla birlikte, Azure İletişim Hizmetleri kaynağının URI'sini ve Entra kullanıcı belirteci için gereken kapsamları sağlamanız gerekir. Bu kapsamlar, belirtece verilen izinleri belirler.

Bu yaklaşımın, Teams lisansına sahip bir Entra kullanıcısını Azure İletişim Hizmetleri kaynağınız aracılığıyla Teams Telefon Genişletilebilirliği özelliklerini kullanma yetkisi vermek için kullanılması gerekir. Bu, kapsamın sağlanmasını https://auth.msft.communication.azure.com/TeamsExtension.ManageCalls gerektirir. GCCH bulut ortamı https://auth.msft.communication.azure.us/TeamsExtension.ManageCallsiçin .

import { InteractiveBrowserCredential } from "@azure/identity";
import {
  EntraCommunicationTokenCredentialOptions,
  AzureCommunicationTokenCredential,
} from "@azure/communication-common";

const options = {
  tenantId: "<your-tenant-id>",
  clientId: "<your-client-id>",
  redirectUri: "<your-redirect-uri>",
};
const entraTokenCredential = new InteractiveBrowserCredential(options);

const entraTokenCredentialOptions: EntraCommunicationTokenCredentialOptions = {
  resourceEndpoint: "https://<your-resource>.communication.azure.com",
  tokenCredential: entraTokenCredential,
  scopes: ["https://auth.msft.communication.azure.com/TeamsExtension.ManageCalls"],
};

const credential = new AzureCommunicationTokenCredential(entraTokenCredentialOptions);

Entra kullanıcılarının Azure İletişim Hizmetleri'ni kullanmasına yönelik diğer senaryolar şu anda yalnızca önizleme aşamasındadır ve üretimde kullanılmamalıdır. Bu senaryoların kapsamları biçimi https://communication.azure.com/clients/<ACS Scope>izler. Belirli kapsamlar sağlanmazsa, varsayılan kapsamlar olarak https://communication.azure.com/clients/.defaultayarlanır.

import { InteractiveBrowserCredential } from "@azure/identity";
import {
  EntraCommunicationTokenCredentialOptions,
  AzureCommunicationTokenCredential,
} from "@azure/communication-common";

const options = {
  tenantId: "<your-tenant-id>",
  clientId: "<your-client-id>",
  redirectUri: "<your-redirect-uri>",
};
const entraTokenCredential = new InteractiveBrowserCredential(options);

const entraTokenCredentialOptions: EntraCommunicationTokenCredentialOptions = {
  resourceEndpoint: "https://<your-resource>.communication.azure.com",
  tokenCredential: entraTokenCredential,
  scopes: ["https://communication.azure.com/clients/VoIP"],
};

const credential = new AzureCommunicationTokenCredential(entraTokenCredentialOptions);

Sorun giderme

  • Geçersiz belirteç belirtildi: Oluşturucuya veya geri çağırmaya AzureCommunicationTokenCredential geçirdiğiniz belirtecin tokenRefresher çıplak bir JWT belirteç dizesi olduğundan emin olun. Örneğin, belirteci almak için Azure İletişim Kimliği kitaplığını veya REST API'sini kullanıyorsanız, yanıt nesnesinin yalnızca token bir kısmını geçirdiğinizden emin olun.

Ağaç kesimi

Loglamayı etkinleştirmek, hatalarla ilgili yararlı bilgilerin ortaya çıkmasına yardımcı olabilir. HTTP isteklerinin ve yanıtlarının günlüğünü görmek için ortam değişkenini AZURE_LOG_LEVEL olarak infoayarlayın. Alternatif olarak, çalışma zamanında setLogLevel@azure/logger çağrılarak günlük tutma etkinleştirilebilir.

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Sonraki Adımlar

Katkıda Bulunmak

Bu kitaplığa katkıda bulunmak istiyorsanız kodu oluşturma ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzu okuyun.