Share via


Speech SDK を使用した Microsoft Entra 認証

Speech SDK を使用して Speech サービスにアクセスする場合、サービス キー、キーベースのトークン、Microsoft Entra ID の 3 つの認証方法を使用できます。 この記事では、Microsoft Entra ID を認証に使用できるように、Speech リソースを構成し、Speech SDK 構成オブジェクトを作成する方法について説明します。

この記事では、Speech SDK で Microsoft Entra 認証を使用する方法を示します。 学習内容は次のとおりです。

  • Speech リソースを作成する
  • Microsoft Entra 認証の Speech リソースを構成する
  • Microsoft Entra トークンを取得する
  • 適切な SDK 構成オブジェクトを作成する

トークンの有効期間など、Microsoft Entra アクセス トークンの詳細については、「Microsoft ID プラットフォームのアクセス トークン」を参照してください。

Speech リソースを作成する

Azure portalで Speech リソースを作成するには、「リソースのキーを取得する」を参照してください

Microsoft Entra 認証の Speech リソースを構成する

Microsoft Entra 認証用にご自身の Speech リソースを構成するには、カスタム ドメイン名を作成し、ロールを割り当てます。

カスタム ドメイン名を作成する

こちらの手順に従って、Speech リソースの Azure AI サービスのカスタム サブドメイン名を作成します。

注意事項

カスタム ドメイン名をオンにした場合、この操作を元に戻すことはできませんリージョン名に戻る唯一の方法は、新しい Speech リソースを作成することです。

Speech Studio を使用して作成された多数のカスタム モデルおよびプロジェクトが Speech リソースに関連付けられている場合は、運用環境で使用されているリソースを変更する前に、テスト リソースで構成を試してみることを強くお勧めします。

Azure portal を使用してカスタム ドメイン名を作成するには、次の手順に従います。

  1. Azure portal に移動し、ご自分の Azure アカウントにサインインします。

  2. 必要な Speech リソースを選択します。

  3. 左側のペインの [リソース管理] グループで、 [ネットワーク] を選択します。

  4. [ファイアウォールと仮想ネットワーク] タブで、 [カスタム ドメイン名を生成します] を選択します。 新しい右パネルが開き、リソースの一意のカスタム サブドメインを作成する手順が示されます。

  5. [カスタム ドメイン名の生成] パネルで、カスタム ドメイン名を入力します。 完全なカスタム ドメインは、https://{your custom name}.cognitiveservices.azure.com のようになります。

    作成したカスタム ドメイン名は後で変更 "できない" ことに注意してください。

    カスタム ドメイン名を入力した後、 [保存] を選択します。

  6. 操作が終わったら、 [リソース管理] グループで [Keys and Endpoint](キーとエンドポイント) を選択します。 リソースの新しいエンドポイント名が次のように始まっていることを確認します: https://{your custom name}.cognitiveservices.azure.com

ロールを割り当てる

Speech リソースを使用して Microsoft Entra 認証を行うには、"Cognitive Services Speech 共同作成者" または "Cognitive Services Speech ユーザー" のいずれかのロールを割り当てる必要があります。

Azure portal または PowerShell を使用して、ユーザーまたはアプリケーションにロールを割り当てることができます。

Microsoft Entra トークンを取得する

C# で Microsoft Entra アクセス トークンを取得するには、Azure ID クライアント ライブラリを使用します。

Azure ID を使用して、対話型ブラウザーから Microsoft Entra アクセス トークンを取得する例を次に示します:

TokenRequestContext context = new Azure.Core.TokenRequestContext(new string[] { "https://cognitiveservices.azure.com/.default" });
InteractiveBrowserCredential browserCredential = new InteractiveBrowserCredential();
var browserToken = browserCredential.GetToken(context);
string aadToken = browserToken.Token;

トークン コンテキストは "https://cognitiveservices.azure.com/.default" に設定されている必要があります。

C++ で Microsoft Entra アクセス トークンを取得するには、Azure ID クライアント ライブラリを使用します。

Azure ID を使用して、テナント ID、クライアント ID、クライアント シークレット資格情報を含む Microsoft Entra アクセス トークンを取得する例を次に示します:

const std::string tenantId = "Your Tenant ID";
const std::string clientId = "Your Client ID";
const std::string clientSecret = "Your Client Secret";
const std::string tokenContext = "https://cognitiveservices.azure.com/.default";

Azure::Identity::ClientSecretCredential cred(tenantId,
    clientId,
    clientSecret,
    Azure::Identity::ClientSecretCredentialOptions());

Azure::Core::Credentials::TokenRequestContext context;
context.Scopes.push_back(tokenContext);

auto token = cred.GetToken(context, Azure::Core::Context());

トークン コンテキストは "https://cognitiveservices.azure.com/.default" に設定されている必要があります。

Java で Microsoft Entra アクセス トークンを取得するには、Azure ID クライアント ライブラリを使用します。

Azure ID を使用して、ブラウザーから Microsoft Entra アクセス トークンを取得する例を次に示します:

TokenRequestContext context = new TokenRequestContext();
context.addScopes("https://cognitiveservices.azure.com/.default");

InteractiveBrowserCredentialBuilder builder = new InteractiveBrowserCredentialBuilder();
InteractiveBrowserCredential browserCredential = builder.build();

AccessToken browserToken = browserCredential.getToken(context).block();
String token = browserToken.getToken();

トークン コンテキストは "https://cognitiveservices.azure.com/.default" に設定されている必要があります。

Java で Microsoft Entra アクセス トークンを取得するには、Azure ID クライアント ライブラリを使用します。

Azure ID を使用して、対話型ブラウザーから Microsoft Entra アクセス トークンを取得する例を次に示します:

from azure.identity import  InteractiveBrowserCredential
ibc = InteractiveBrowserCredential()
aadToken = ibc.get_token("https://cognitiveservices.azure.com/.default")

Microsoft ID プラットフォームのコード サンプル内で、Microsoft Entra アクセス トークンを取得するサンプルを見つけます。

Microsoft ID プラットフォームのクライアント ライブラリを使用できないプログラミング言語の場合、直接アクセス トークンを要求できます

Speech リソース ID を取得する

Microsoft Entra 認証を使用して SDK 呼び出しを行うには、お使いの Speech リソース ID が必要です。

Note

意図認識については、LUIS 予測リソース ID を使用します。

Azure portal 内でリソース ID を取得するには:

  1. Azure portal に移動し、ご自分の Azure アカウントにサインインします。
  2. Speech リソースの選択します。
  3. 左側のペインの [リソース管理] グループで、[プロパティ] を選択します。
  4. リソース ID をコピーします

Speech SDK 構成オブジェクトを作成する

Microsoft Entra アクセス トークンを使用して、Speech SDK 構成オブジェクトを作成することができます。

トークンの提供方法や、対応する Speech SDK の Config オブジェクトの構築方法は、使用するオブジェクトによって異なります。

SpeechRecognizer、SpeechSynthesizer、IntentRecognizer、ConversationTranscriber

SpeechRecognizerSpeechSynthesizerIntentRecognizerConversationTranscriber の各オブジェクトについては、リソース ID と Microsoft Entra アクセス トークンから認可トークンを作成し、それを使用して SpeechConfig オブジェクトを作成します。

string resourceId = "Your Resource ID";
string aadToken = "Your Azure AD access token";
string region =  "Your Speech Region";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
var speechConfig = SpeechConfig.FromAuthorizationToken(authorizationToken, region);
std::string resourceId = "Your Resource ID";
std::string aadToken = "Your Azure AD access token";
std::string region = "Your Speech Region";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
auto authorizationToken = "aad#" + resourceId + "#" + aadToken;
auto speechConfig = SpeechConfig::FromAuthorizationToken(authorizationToken, region);
String resourceId = "Your Resource ID";
String region = "Your Region";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
String authorizationToken = "aad#" + resourceId + "#" + token;
SpeechConfig speechConfig = SpeechConfig.fromAuthorizationToken(authorizationToken, region);
resourceId = "Your Resource ID"
region = "Your Region"
# You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
authorizationToken = "aad#" + resourceId + "#" + aadToken.token
speechConfig = SpeechConfig(auth_token=authorizationToken, region=region)

TranslationRecognizer

TranslationRecognizer では、リソース ID と Microsoft Entra アクセス トークンから認可トークンを作成し、それを使用して SpeechTranslationConfig オブジェクトを作成します。

string resourceId = "Your Resource ID";
string aadToken = "Your Azure AD access token";
string region =  "Your Speech Region";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
var speechConfig = SpeechTranslationConfig.FromAuthorizationToken(authorizationToken, region);
std::string resourceId = "Your Resource ID";
std::string aadToken = "Your Azure AD access token";
std::string region = "Your Speech Region";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
auto authorizationToken = "aad#" + resourceId + "#" + aadToken;
auto speechConfig = SpeechTranslationConfig::FromAuthorizationToken(authorizationToken, region);
String resourceId = "Your Resource ID";
String region = "Your Region";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
String authorizationToken = "aad#" + resourceId + "#" + token;
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromAuthorizationToken(authorizationToken, region);
resourceId = "Your Resource ID"
region = "Your Region"

# You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
authorizationToken = "aad#" + resourceId + "#" + aadToken.token
translationConfig = SpeechTranslationConfig(auth_token=authorizationToken, region=region)

DialogServiceConnector

DialogServiceConnection オブジェクトでは、リソース ID と Microsoft Entra アクセス トークンから認可トークンを作成し、それを使用して CustomCommandsConfig または BotFrameworkConfig オブジェクトを作成します。

string resourceId = "Your Resource ID";
string aadToken = "Your Azure AD access token";
string region =  "Your Speech Region";
string appId = "Your app ID";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
var customCommandsConfig = CustomCommandsConfig.FromAuthorizationToken(appId, authorizationToken, region);
std::string resourceId = "Your Resource ID";
std::string aadToken = "Your Azure AD access token";
std::string region = "Your Speech Region";
std::string appId = "Your app Id";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
auto authorizationToken = "aad#" + resourceId + "#" + aadToken;
auto customCommandsConfig = CustomCommandsConfig::FromAuthorizationToken(appId, authorizationToken, region);
String resourceId = "Your Resource ID";
String region = "Your Region";
String appId = "Your AppId";

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
String authorizationToken = "aad#" + resourceId + "#" + token;
CustomCommandsConfig dialogServiceConfig = CustomCommandsConfig.fromAuthorizationToken(appId, authorizationToken, region);

DialogServiceConnector は現在、Python ではサポートされていません

VoiceProfileClient

Microsoft Entra 認証で VoiceProfileClient を使用するには、上記で作成したカスタム ドメイン名を使用します。

string customDomainName = "Your Custom Name";
string hostName = $"https://{customDomainName}.cognitiveservices.azure.com/";
string token = "Your Azure AD access token";

var config =  SpeechConfig.FromHost(new Uri(hostName));

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
config.AuthorizationToken = authorizationToken;
std::string customDomainName = "Your Custom Name";
std::string aadToken = "Your Azure AD access token";

auto speechConfig = SpeechConfig::FromHost("https://" + customDomainName + ".cognitiveservices.azure.com/");

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
auto authorizationToken = "aad#" + resourceId + "#" + aadToken;
speechConfig->SetAuthorizationToken(authorizationToken);
String aadToken = "Your Azure AD access token";
String customDomainName = "Your Custom Name";
String hostName = "https://" + customDomainName + ".cognitiveservices.azure.com/";
SpeechConfig speechConfig = SpeechConfig.fromHost(new URI(hostName));

// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and AAD access token.
String authorizationToken = "aad#" + resourceId + "#" + token;

speechConfig.setAuthorizationToken(authorizationToken);

VoiceProfileClient は Python 用 Speech SDK では使用できません。

Note

ConversationTranslator では、Microsoft Entra 認証はサポートされていません。