クイックスタート: Microsoft Entra ID を使用して認証する

Microsoft Entra ID を使用して、Azure Communication Services を開始します。 Communication Services ID と SMS SDK は、Microsoft Entra 認証をサポートしています。

このクイックスタートでは、Active Directory をサポートする Azure 環境から、ID および SMS SDK へのアクセスを承認する方法について説明します。 作業用にサービス プリンシパルを作成し、開発環境でコードスをテストする方法についても説明しています。

前提条件

追加の前提条件

設定

他の Azure リソースに Active Directory を使用している場合は、マネージド ID を使用する必要があります。 Azure リソースのマネージド ID を有効にする方法については、次の記事のいずれかを参照してください。

開発環境で登録したアプリケーションを認証する

開発環境で Web ブラウザーによるシングル サインオンまたはログインがサポートされていない場合は、登録したアプリケーションを使用して開発環境から認証を受けることができます。

Microsoft Entra 登録済みアプリケーションの作成

Azure CLI から登録したアプリケーションを作成するには、操作を実行する Azure アカウントにログインする必要があります。 これを行うには、az login コマンドを使用して、ブラウザーで資格情報を入力します。 CLI から Azure アカウントにログインしたら、az ad sp create-for-rbac コマンドを呼び出して、登録されたアプリケーションとサービス プリンシパルを作成できます。

次の例では、Azure CLI を使って、新しい登録済みアプリケーションを作成します。

az ad sp create-for-rbac --name <application-name> --role Contributor --scopes /subscriptions/<subscription-id>

az ad sp create-for-rbac コマンドによって、サービス プリンシパルのプロパティの一覧が JSON 形式で返されます。 これらの値をコピーして、次の手順で必要な環境変数を作成するために使用できるようにします。

{
    "appId": "generated-app-ID",
    "displayName": "service-principal-name",
    "name": "http://service-principal-uri",
    "password": "generated-password",
    "tenant": "tenant-ID"
}

重要

Azure ロールの割り当ての反映には数分かかることがあります。

環境変数の設定

Azure ID SDK では、実行時に 3 つの環境変数から値が読み取られ、アプリケーションが認証されます。 次の表で、各環境変数に設定する値について説明します。

環境変数
AZURE_CLIENT_ID 生成された JSON の appId の値
AZURE_TENANT_ID 生成された JSON の tenant の値
AZURE_CLIENT_SECRET 生成された JSON の password の値

重要

環境変数を設定したら、コンソール ウィンドウを閉じて再度開きます。 Visual Studio または他の開発環境を使用している場合は、新しい環境変数を登録するために再起動が必要となる可能性があります。

これらの変数が設定されると、コード内の DefaultAzureCredential オブジェクトを使用して、選択したサービス クライアントに対して認証できるようになります。

Note

このクイックスタートの最終的なコードは GitHub にあります

設定

新しい C# アプリケーションを作成する

コンソール ウィンドウ (cmd、PowerShell、Bash など) で、dotnet new コマンドを使用し、ActiveDirectoryQuickstart という名前で新しいコンソール アプリを作成します。 このコマンドにより、1 つのソース ファイル (Program.cs) を使用する単純な "Hello World" C# プロジェクトが作成されます。

dotnet new console -o ActiveDirectoryAuthenticationQuickstart

新しく作成したアプリ フォルダーにディレクトリを変更し、dotnet build コマンドを使用してアプリケーションをコンパイルします。

cd ActiveDirectoryAuthenticationQuickstart
dotnet build

SDK パッケージをインストールする

dotnet add package Azure.Communication.Identity
dotnet add package Azure.Communication.Sms
dotnet add package Azure.Identity

SDK パッケージを使用する

Azure ID と Azure Storage SDK を使用するには、次の using ディレクティブを Program.cs に追加します。

using Azure.Identity;
using Azure.Communication.Identity;
using Azure.Communication.Sms;
using Azure.Core;
using Azure;

DefaultAzureCredential を作成する

このクイックスタートでは、DefaultAzureCredential を使用します。 この資格情報は、運用と開発の各環境に適しています。 これは各操作に必要なので、Program.cs クラス内に作成します。 ファイルの先頭に以下を追加します。

private DefaultAzureCredential credential = new DefaultAzureCredential();

サービス プリンシパルを使用してトークンを発行する

次に、作成した資格情報を使用するコードを追加して、VoIP アクセス トークンを発行します。 このコードは後で呼び出します。

public AccessToken CreateIdentityAndGetTokenAsync(Uri resourceEndpoint)
{
    var client = new CommunicationIdentityClient(resourceEndpoint, this.credential);
    var result = client.CreateUserAndToken(scopes: new[] { CommunicationTokenScope.VoIP });
    var (user, token) = response.Value;
    return token;
}

サービス プリンシパルを使用して SMS を送信する

サービス プリンシパルを使用するもう 1 つの例として、同じ資格情報を使用して SMS を送信する次のコードを追加します。

public SmsSendResult SendSms(Uri resourceEndpoint, string from, string to, string message)
{
    SmsClient smsClient = new SmsClient(resourceEndpoint, this.credential);
    SmsSendResult sendResult = smsClient.Send(
            from: from,
            to: to,
            message: message,
            new SmsSendOptions(enableDeliveryReport: true) // optional
        );

    return sendResult;
}

Main メソッドを作成する

Program.cs には Main メソッドが既に含まれているはずなので、前に作成したコードを呼び出してサービス プリンシパルの使用方法を実演するコードを追加してみましょう。

static void Main(string[] args)
{
    // You can find your endpoint and access key from your resource in the Azure portal
    // e.g. "https://<RESOURCE_NAME>.communication.azure.com";
    Uri endpoint = new("https://<RESOURCENAME>.communication.azure.com/");

    // We need an instance of the program class to use within this method.
    Program instance = new();

    Console.WriteLine("Retrieving new Access Token, using Service Principals");
    AccessToken response = instance.CreateIdentityAndGetTokenAsync(endpoint);
    Console.WriteLine($"Retrieved Access Token: {response.Token}");

    Console.WriteLine("Sending SMS using Service Principals");

    // You will need a phone number from your resource to send an SMS.
    SmsSendResult result = instance.SendSms(endpoint, "<Your Azure Communication Services Phone Number>", "<The Phone Number you'd like to send the SMS to.>", "Hello from using Service Principals");
    Console.WriteLine($"Sms id: {result.MessageId}");
    Console.WriteLine($"Send Result Successful: {result.Successful}");
}

最終的な Program.cs ファイルは次のようになります。

class Program
     {
          private DefaultAzureCredential credential = new DefaultAzureCredential();
          static void Main(string[] args)
          {
               // You can find your endpoint and access key from your resource in the Azure portal
               // e.g. "https://<RESOURCE_NAME>.communication.azure.com";
               Uri endpoint = new("https://acstestingrifox.communication.azure.com/");

               // We need an instance of the program class to use within this method.
               Program instance = new();

               Console.WriteLine("Retrieving new Access Token, using Service Principals");
               AccessToken response = instance.CreateIdentityAndGetTokenAsync(endpoint);
               Console.WriteLine($"Retrieved Access Token: {response.Token}");

               Console.WriteLine("Sending SMS using Service Principals");

               // You will need a phone number from your resource to send an SMS.
               SmsSendResult result = instance.SendSms(endpoint, "<Your Azure Communication Services Phone Number>", "<The Phone Number you'd like to send the SMS to.>", "Hello from Service Principals");
               Console.WriteLine($"Sms id: {result.MessageId}");
               Console.WriteLine($"Send Result Successful: {result.Successful}");
          }
          public AccessToken CreateIdentityAndGetTokenAsync(Uri resourceEndpoint)
          {
               var client = new CommunicationIdentityClient(resourceEndpoint, this.credential);
               var result = client.CreateUserAndToken(scopes: new[] { CommunicationTokenScope.VoIP });
               var (user, token) = response.Value;
               return token;
          }
          public SmsSendResult SendSms(Uri resourceEndpoint, string from, string to, string message)
          {
               SmsClient smsClient = new SmsClient(resourceEndpoint, this.credential);
               SmsSendResult sendResult = smsClient.Send(
                    from: from,
                    to: to,
                    message: message,
                    new SmsSendOptions(enableDeliveryReport: true) // optional
               );

               return sendResult;
          }
    }

プログラムを実行する

これで、アプリケーション フォルダーから dotnet run を使用して、アプリケーションを実行できるようになりました。 出力は次のようになります。

Retrieving new Access Token, using Service Principals
Retrieved Access Token: ey....
Sending SMS using Service Principals
Sms id: Outgoing_..._noam
Send Result Successful: True

Note

このクイックスタートの最終的なコードは GitHub にあります

設定

新しい Node.js アプリケーションを作成する

ターミナルまたはコマンド ウィンドウを開き、アプリ用の新しいディレクトリを作成し、そこに移動します。

mkdir active-directory-authentication-quickstart && cd active-directory-authentication-quickstart

既定の設定で npm init -y を実行して、package.json ファイルを作成します。

npm init -y

SDK パッケージをインストールする

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

新しいファイルを作成する

テキスト エディターで新規ファイルを開き、index.js として保存します。このファイル内にコードを配置していきます。

SDK パッケージを使用する

Azure ID と Azure Storage SDK を使用するには、次の require ディレクティブを index.js の先頭に追加します。

const { DefaultAzureCredential } = require("@azure/identity");
const { CommunicationIdentityClient, CommunicationUserToken } = require("@azure/communication-identity");
const { SmsClient, SmsSendRequest } = require("@azure/communication-sms");

DefaultAzureCredential を作成する

このクイックスタートでは、DefaultAzureCredential を使用します。 この資格情報は、運用と開発の各環境に適しています。 これは各操作に必要なので、index.js ファイルの先頭に作成します。

    const credential = new DefaultAzureCredential();

ID を作成し、サービス プリンシパルを使用してトークンを発行します

次に、新しい ID を作成してこの ID のトークンを発行する関数を作成します。これは、後にサービス プリンシパルの設定をテストするために使用します。

async function createIdentityAndIssueToken(resourceEndpoint) {
    const client = new CommunicationIdentityClient(resourceEndpoint, credential);
    return await client.createUserAndToken(["chat"]);
}

サービス プリンシパルを使用して SMS を送信する

次に、サービス プリンシパルを使用して SMS を送信する関数を作成します。

async function sendSms(resourceEndpoint, fromNumber, toNumber, message) {
    const smsClient = new SmsClient(resourceEndpoint, credential);
    const sendRequest = {
        from: fromNumber,
        to: [toNumber],
        message: message
    };
    return await smsClient.send(
        sendRequest,
        {} //Optional SendOptions
    );
}

main 関数を記述する

関数を作成したので、それらを呼び出す main 関数を作成し、サービス プリンシパルの使用方法について実演してみましょう。

async function main() {
    // You can find your endpoint and access key from your resource in the Azure portal
    // e.g. "https://<RESOURCE_NAME>.communication.azure.com";
    const endpoint = "https://<RESOURCE_NAME>.communication.azure.com/"

    
    console.log("Retrieving new Access Token, using Service Principals");
    const result = await createIdentityAndIssueToken(endpoint);
    console.log(`Retrieved Access Token: ${result.token}`);

    console.log("Sending SMS using Service Principals");

    // You will need a phone number from your resource to send an SMS.
    const smsResult = await sendSms(endpoint, "<FROM NUMBER>", "<TO NUMBER>", "Hello from Service Principals");
    console.log(`SMS ID: ${smsResult[0].messageId}`);
    console.log(`Send Result Successful: ${smsResult[0].successful}`);
}

main();

最終的な index.js ファイルは次のようになります。

const { DefaultAzureCredential } = require("@azure/identity");
const { CommunicationIdentityClient, CommunicationUserToken } = require("@azure/communication-identity");
const { SmsClient, SmsSendRequest } = require("@azure/communication-sms");

const credential = new DefaultAzureCredential();

async function createIdentityAndIssueToken(resourceEndpoint) {
    const client = new CommunicationIdentityClient(resourceEndpoint, credential);
    return await client.createUserAndToken(["chat"]);
}

async function sendSms(resourceEndpoint, fromNumber, toNumber, message) {
    const smsClient = new SmsClient(resourceEndpoint, credential);
    const sendRequest = {
        from: fromNumber,
        to: [toNumber],
        message: message
    };
    return await smsClient.send(
        sendRequest,
        {} //Optional SendOptions
    );
}

async function main() {
    // You can find your endpoint and access key from your resource in the Azure portal
    // e.g. "https://<RESOURCE_NAME>.communication.azure.com";
    const endpoint = "https://<RESOURCE_NAME>.communication.azure.com/"

    
    console.log("Retrieving new Access Token, using Service Principals");
    const result = await createIdentityAndIssueToken(endpoint);
    console.log(`Retrieved Access Token: ${result.token}`);

    console.log("Sending SMS using Service Principals");

    // You will need a phone number from your resource to send an SMS.
    const smsResult = await sendSms(endpoint, "<FROM NUMBER>", "<TO NUMBER>", "Hello from Service Principals");
    console.log(`SMS ID: ${smsResult[0].messageId}`);
    console.log(`Send Result Successful: ${smsResult[0].successful}`);
}

main();

プログラムを実行する

すべてが完了したら、プロジェクトのディレクトリから node index.js と入力してファイルを実行できます。 正常に実行されると、次のような出力結果が表示されます。

    $ node index.js
    Retrieving new Access Token, using Service Principals
    Retrieved Access Token: ey...Q
    Sending SMS using Service Principals
    SMS ID: Outgoing_2021040602194...._noam
    Send Result Successful: true

Java の追加の前提条件

Java の場合は、以下も必要となります。

Note

このクイックスタートの最終的なコードは GitHub にあります

設定

新しい Java アプリケーションを作成する

ターミナルまたはコマンド ウィンドウを開きます。 Java アプリケーションを作成するディレクトリに移動します。 次のコマンドを実行して、maven-archetype-quickstart テンプレートから Java プロジェクトを生成します。

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

"generate" タスクによって、artifactId と同じ名前のディレクトリが作成されたことがわかります。 このディレクトリの下の src/main/java ディレクトリにはプロジェクトのソース コードが含まれており、 src/test/java directory にはテスト ソースが含まれており、pom.xml ファイルはプロジェクトのプロジェクト オブジェクト モデル (POM) です。

パッケージをインストールする

テキスト エディターで pom.xml ファイルを開きます。 依存関係のグループに、次の dependency 要素を追加します。

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-identity</artifactId>
    <version>[1.4.0,)</version>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-sms</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.2.3</version>
</dependency>

SDK パッケージを使用する

Azure ID と Azure Communication SDK を使用するには、次の import ディレクティブをコードに追加します。

import com.azure.communication.common.*;
import com.azure.communication.identity.*;
import com.azure.communication.identity.models.*;
import com.azure.communication.sms.*;
import com.azure.communication.sms.models.*;
import com.azure.core.credential.*;
import com.azure.identity.*;

import java.util.*;

DefaultAzureCredential を作成する

このクイックスタートでは、DefaultAzureCredential を使用します。 この資格情報は、運用と開発の各環境に適しています。 これは各操作に必要なので、App.java クラス内に作成します。 App.java の先頭に以下を追加します。

private TokenCredential credential = new DefaultAzureCredentialBuilder().build();

サービス プリンシパルを使用してトークンを発行する

次に、作成した資格情報を使用するコードを追加して、VoIP アクセス トークンを発行します。 このコードは後で呼び出します。

    public AccessToken createIdentityAndGetTokenAsync(String endpoint) {
          CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
                    .endpoint(endpoint)
                    .credential(this.credential)
                    .buildClient();

          CommunicationUserIdentifierAndToken result =  communicationIdentityClient.createUserAndToken(new ArrayList<>(Arrays.asList(CommunicationTokenScope.CHAT)));
          return result.getUserToken();
    }

サービス プリンシパルを使用して SMS を送信する

サービス プリンシパルを使用するもう 1 つの例として、同じ資格情報を使用して SMS を送信する次のコードを追加します。

     public SmsSendResult sendSms(String endpoint, String from, String to, String message) {
          SmsClient smsClient = new SmsClientBuilder()
                    .endpoint(endpoint)
                    .credential(this.credential)
                    .buildClient();

          // Send the message and check the response for a message id
          return smsClient.send(from, to, message);
     }

Main メソッドを作成する

App.java には Main メソッドが既に含まれているはずなので、前に作成したコードを呼び出してサービス プリンシパルの使用方法を実演するコードを追加してみましょう。

    public static void main(String[] args) {
          App instance = new App();
          // You can find your endpoint and access key from your resource in the Azure portal
          // e.g. "https://<RESOURCE_NAME>.communication.azure.com";
          String endpoint = "https://<RESOURCE_NAME>.communication.azure.com/";

          System.out.println("Retrieving new Access Token, using Service Principals");
          AccessToken token = instance.createIdentityAndGetTokenAsync(endpoint);
          System.out.println("Retrieved Access Token: "+ token.getToken());

          System.out.println("Sending SMS using Service Principals");
          // You will need a phone number from your resource to send an SMS.
          SmsSendResult result = instance.sendSms(endpoint, "<FROM NUMBER>", "<TO NUMBER>", "Hello from Service Principals");
          System.out.println("Sms id: "+ result.getMessageId());
          System.out.println("Send Result Successful: "+ result.isSuccessful());
    }

最終的な App.java は、次のようになります。

package com.communication.quickstart;

import com.azure.communication.common.*;
import com.azure.communication.identity.*;
import com.azure.communication.identity.models.*;
import com.azure.communication.sms.*;
import com.azure.communication.sms.models.*;
import com.azure.core.credential.*;
import com.azure.identity.*;

import java.util.*;

public class App 
{

    private TokenCredential credential = new DefaultAzureCredentialBuilder().build();

    public SmsSendResult sendSms(String endpoint, String from, String to, String message) {
          SmsClient smsClient = new SmsClientBuilder()
               .endpoint(endpoint)
               .credential(this.credential)
               .buildClient();

          // Send the message and check the response for a message id
          return smsClient.send(from, to, message);
    }
    
    public AccessToken createIdentityAndGetTokenAsync(String endpoint) {
          CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
                    .endpoint(endpoint)
                    .credential(this.credential)
                    .buildClient();

          CommunicationUserIdentifierAndToken result =  communicationIdentityClient.createUserAndToken(new ArrayList<>(Arrays.asList(CommunicationTokenScope.CHAT)));
          return result.getUserToken();
    }

    public static void main(String[] args) {
          App instance = new App();
          // You can find your endpoint and access key from your resource in the Azure portal
          // e.g. "https://<RESOURCE_NAME>.communication.azure.com";
          String endpoint = "https://<RESOURCE_NAME>.communication.azure.com/";

          System.out.println("Retrieving new Access Token, using Service Principals");
          AccessToken token = instance.createIdentityAndGetTokenAsync(endpoint);
          System.out.println("Retrieved Access Token: "+ token.getToken());

          System.out.println("Sending SMS using Service Principals");
          // You will need a phone number from your resource to send an SMS.
          SmsSendResult result = instance.sendSms(endpoint, "<FROM NUMBER>", "<TO NUMBER>", "Hello from Service Principals");
          System.out.println("Sms id: "+ result.getMessageId());
          System.out.println("Send Result Successful: "+ result.isSuccessful());
    }
}

コードの実行

pom.xml ファイルが格納されているディレクトリに移動し、次の mvn コマンドを使用してプロジェクトをコンパイルします。

mvn compile

次に、パッケージをビルドします。

mvn package

次の mvn コマンドを実行して、アプリを実行します。

mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false

最終的な出力は次のようになります。

Retrieving new Access Token, using Service Principals
Retrieved Access Token: ey..A
Sending SMS using using Service Principals
Sms id: Outgoing_202104...33f8ae1f_noam
Send Result Successful: true

Note

このクイックスタートの最終的なコードは GitHub にあります

設定

新しい Python アプリケーションを作成する

ターミナルまたはコマンド ウィンドウを開き、自分のアプリ用に新しいディレクトリを作成し、そこに移動します。

mkdir active-directory-authentication-quickstart && cd active-directory-authentication-quickstart

SDK パッケージをインストールする

pip install azure-identity
pip install azure-communication-identity
pip install azure-communication-sms

新しいファイルを作成する

作成したフォルダー内に authentication.py という名前の新しいファイルを開いて保存すると、このファイル内にコードが配置されます。

SDK パッケージを使用する

インストールした SDK を使用するには、ファイルの先頭に次の import ステートメントを追加します。

from azure.identity import DefaultAzureCredential
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.sms import SmsClient

DefaultAzureCredential を作成する

DefaultAzureCredential を使用します。 この資格情報は、運用と開発の各環境に適しています。 このクイックスタート全体で使用するため、ファイルの先頭に作成します。

     credential = DefaultAzureCredential()

ID を作成し、サービス プリンシパルを使用してトークンを発行する

次に、作成した資格情報を使用するコードを追加して、VoIP アクセストークンを発行します。 このコードは後で呼び出します。

def create_identity_and_get_token(resource_endpoint):
     client = CommunicationIdentityClient(resource_endpoint, credential)
     user, token_response = client.create_user_and_token(scopes=["voip"])

     return token_response

サービス プリンシパルを使用して SMS を送信する

サービス プリンシパルのもう 1 つの使用例として、同じ資格情報を使用して SMS を送信するこのコードを追加します。

def send_sms(resource_endpoint, from_phone_number, to_phone_number, message_content):
     sms_client = SmsClient(resource_endpoint, credential)

     sms_client.send(
          from_=from_phone_number,
          to_=[to_phone_number],
          message=message_content,
          enable_delivery_report=True  # optional property
     )

メイン コードを作成する

関数を作成したら、以前に作成した関数を呼び出すメイン コードを作成できるようになります。

# You can find your endpoint and access key from your resource in the Azure portal
# e.g. "https://<RESOURCE_NAME>.communication.azure.com";
endpoint = "https://<RESOURCE_NAME>.communication.azure.com/"

print("Retrieving new Access Token, using Service Principals");
result = create_identity_and_get_token(endpoint);
print(f'Retrieved Access Token: {result.token}');

print("Sending SMS using Service Principals");

# You will need a phone number from your resource to send an SMS.
sms_result = send_sms(endpoint, "<FROM_NUMBER>", "<TO_NUMBER>", "Hello from Service Principals");
print(f'SMS ID: {sms_result[0].message_id}');
print(f'Send Result Successful: {sms_result[0].successful}');

最終的な authentication.py ファイルは次のようになります。

from azure.identity import DefaultAzureCredential
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.sms import SmsClient

credential = DefaultAzureCredential()

def create_identity_and_get_token(resource_endpoint):
     client = CommunicationIdentityClient(resource_endpoint, credential)
     user, token_response = client.create_user_and_token(scopes=["voip"])

     return token_response

def send_sms(resource_endpoint, from_phone_number, to_phone_number, message_content):
     sms_client = SmsClient(resource_endpoint, credential)

     response = sms_client.send(
          from_=from_phone_number,
          to=[to_phone_number],
          message=message_content,
          enable_delivery_report=True  # optional property
     )
     return response

# You can find your endpoint and access key from your resource in the Azure portal
# e.g. "https://<RESOURCE_NAME>.communication.azure.com";
endpoint = "https://<RESOURCE_NAME>.communication.azure.com/"

print("Retrieving new Access Token, using Service Principals");
result = create_identity_and_get_token(endpoint);
print(f'Retrieved Access Token: {result.token}');

print("Sending SMS using Service Principals");

# You will need a phone number from your resource to send an SMS.
sms_result = send_sms(endpoint, "<FROM_NUMBER>", "<TO_NUMBER>", "Hello from Service Principals");
print(f'SMS ID: {sms_result[0].message_id}');
print(f'Send Result Successful: {sms_result[0].successful}');

プログラムを実行する

すべてが完了したら、プロジェクトのディレクトリから python authentication.py と入力してファイルを実行できます。 正常に実行されると、次のような出力結果が表示されます。

    $ python authentication.py
    Retrieving new Access Token, using Service Principals
    Retrieved Access Token: ey...Q
    Sending SMS using using Service Principals
    SMS ID: Outgoing_2021040602194...._noam
    Send Result Successful: true

次のステップ