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 で音声ソースを作成する場合は、このクイック スタートを参照してください。
Microsoft Entra 認証の Speech リソースを構成する
Microsoft Entra 認証用にご自身の Speech リソースを構成するには、カスタム ドメイン名を作成し、ロールを割り当てます。
カスタム ドメイン名を作成する
こちらの手順に従って、Speech リソースの Azure AI サービスのカスタム サブドメイン名を作成します。
注意事項
カスタム ドメイン名をオンにした場合、この操作を元に戻すことはできません。 リージョン名に戻る唯一の方法は、新しい Speech リソースを作成することです。
Speech Studio を使用して作成された多数のカスタム モデルおよびプロジェクトが Speech リソースに関連付けられている場合は、運用環境で使用されているリソースを変更する前に、テスト リソースで構成を試してみることを強くお勧めします。
Azure portal を使用してカスタム ドメイン名を作成するには、次の手順に従います。
Azure portal に移動し、ご自分の Azure アカウントにサインインします。
必要な Speech リソースを選択します。
左側のペインの [リソース管理] グループで、 [ネットワーク] を選択します。
[ファイアウォールと仮想ネットワーク] タブで、 [カスタム ドメイン名を生成します] を選択します。 新しい右パネルが開き、リソースの一意のカスタム サブドメインを作成する手順が示されます。
[カスタム ドメイン名の生成] パネルで、カスタム ドメイン名を入力します。 完全なカスタム ドメインは、
https://{your custom name}.cognitiveservices.azure.com
のようになります。作成したカスタム ドメイン名は後で変更 "できない" ことに注意してください。
カスタム ドメイン名を入力した後、 [保存] を選択します。
操作が終わったら、 [リソース管理] グループで [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;
Note
トークン コンテキストは "https://cognitiveservices.azure.com/.default" に設定されている必要があります。
C++ で Microsoft Entra アクセス トークンを取得するには、Azure ID クライアント ライブラリを使用します。
Azure ID を使用して、テナント ID、クライアント ID、クライアント シークレット資格情報を含む Microsoft Entra アクセス トークンを取得する例を次に示します:
const std::string tokenContext = "https://cognitiveservices.azure.com/.default";
Azure::Identity::DefaultAzureCredential();
Azure::Core::Credentials::TokenRequestContext context;
context.Scopes.push_back(tokenContext);
auto token = cred.GetToken(context, Azure::Core::Context());
Note
トークン コンテキストは "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();
Note
トークン コンテキストは "https://cognitiveservices.azure.com/.default" に設定されている必要があります。
Python で 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 を取得するには:
- Azure portal に移動し、ご自分の Azure アカウントにサインインします。
- Speech リソースの選択します。
- 左側のペインの [リソース管理] グループで、[プロパティ] を選択します。
- リソース ID をコピーします
Speech SDK 構成オブジェクトを作成する
Microsoft Entra アクセス トークンを使用して、Speech SDK 構成オブジェクトを作成することができます。
トークンの提供方法や、対応する Speech SDK の Config
オブジェクトの構築方法は、使用するオブジェクトによって異なります。
SpeechRecognizer、SpeechSynthesizer、IntentRecognizer、ConversationTranscriber
SpeechRecognizer
、SpeechSynthesizer
、IntentRecognizer
、ConversationTranscriber
の各オブジェクトについては、リソース ID と Microsoft Entra アクセス トークンから認可トークンを作成し、それを使用して SpeechConfig
オブジェクトを作成します。
string resourceId = "Your Resource ID";
string aadToken = "Your Microsoft Entra access token";
string region = "Your Speech Region";
// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and Microsoft Entra access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
var speechConfig = SpeechConfig.FromAuthorizationToken(authorizationToken, region);
std::string resourceId = "Your Resource ID";
std::string aadToken = "Your Microsoft Entra access token";
std::string region = "Your Speech Region";
// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and Microsoft Entra 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 Microsoft Entra 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 Microsoft Entra 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 Microsoft Entra access token";
string region = "Your Speech Region";
// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and Microsoft Entra access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
var speechConfig = SpeechTranslationConfig.FromAuthorizationToken(authorizationToken, region);
std::string resourceId = "Your Resource ID";
std::string aadToken = "Your Microsoft Entra access token";
std::string region = "Your Speech Region";
// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and Microsoft Entra 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 Microsoft Entra 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 Microsoft Entra access token.
authorizationToken = "aad#" + resourceId + "#" + aadToken.token
translationConfig = SpeechTranslationConfig(auth_token=authorizationToken, region=region)
VoiceProfileClient
Microsoft Entra 認証で VoiceProfileClient
を使用するには、上記で作成したカスタム ドメイン名を使用します。
string customDomainName = "Your Custom Name";
string hostName = $"https://{customDomainName}.cognitiveservices.azure.com/";
string token = "Your Microsoft Entra access token";
var config = SpeechConfig.FromHost(new Uri(hostName));
// You need to include the "aad#" prefix and the "#" (hash) separator between resource ID and Microsoft Entra access token.
var authorizationToken = $"aad#{resourceId}#{aadToken}";
config.AuthorizationToken = authorizationToken;
std::string customDomainName = "Your Custom Name";
std::string aadToken = "Your Microsoft Entra 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 Microsoft Entra access token.
auto authorizationToken = "aad#" + resourceId + "#" + aadToken;
speechConfig->SetAuthorizationToken(authorizationToken);
String aadToken = "Your Microsoft Entra 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 Microsoft Entra access token.
String authorizationToken = "aad#" + resourceId + "#" + token;
speechConfig.setAuthorizationToken(authorizationToken);
VoiceProfileClient
は Python 用 Speech SDK では使用できません。
Note
ConversationTranslator
では、Microsoft Entra 認証はサポートされていません。