Aracılığıyla paylaş


JavaScript için Azure İletişim Ortak istemci kitaplığı - sürüm 2.4.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",
});

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.

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.