Краткое руководство. Проверка подлинности с помощью идентификатора Microsoft Entra
Начало работы с Службы коммуникации Azure с помощью идентификатора Microsoft Entra. Пакеты SDK для удостоверений служб коммуникации и SMS поддерживают проверку подлинности Microsoft Entra.
В этом кратком руководстве показано, как авторизовать доступ к пакетам SDK удостоверений и SMS из среды Azure, которая поддерживает Active Directory. Здесь также описывается порядок тестирования кода в среде разработки путем создания субъекта-службы для работы.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создание бесплатной учетной записи
- Активный ресурс Служб коммуникации Azure. Создайте ресурс Служб коммуникации, если его еще нет.
- Чтобы отправить SMS, вам потребуется номер телефона.
- Субъект-служба установки для среды разработки см. в статье "Авторизация доступа с помощью субъекта-службы"
Дополнительные компоненты
- Azure CLI. Руководство по установке
Настройка
При использовании Active Directory для других ресурсов Azure следует использовать управляемые удостоверения. Сведения о включении управляемых удостоверений для ресурсов Azure см. в одной из следующих статей.
- Портал Azure
- Azure PowerShell
- Azure CLI
- Шаблон Azure Resource Manager
- Пакеты SDK Azure Resource Manager
- Службы приложений
Проверка подлинности зарегистрированного приложения в среде разработки
Если среда разработки не поддерживает единый вход или вход через веб-браузер, вы можете использовать зарегистрированное приложение для проверки подлинности из среды разработки.
Создание зарегистрированного приложения Microsoft Entra
Чтобы создать зарегистрированное приложение на основе Azure CLI, необходимо войти в учетную запись Azure, в которой должны выполняться операции. Для этого можно использовать команду az login
и ввести учетные данные в браузере. После входа в учетную запись 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 может занимать несколько минут.
Настройка переменных среды
Пакет SDK для удостоверений Azure считывает значения из трех переменных среды во время выполнения для проверки подлинности приложения. В следующей таблице описывается значение, которое задается для каждой переменной среды.
Переменная среды | Значение |
---|---|
AZURE_CLIENT_ID |
Значение appId из созданного JSON |
AZURE_TENANT_ID |
Значение tenant из созданного JSON |
AZURE_CLIENT_SECRET |
Значение password из созданного JSON |
Внимание
После задания переменных среды закройте и снова откройте окно консоли. Если вы используете Visual Studio или другую среду разработки, может потребоваться перезапустить ее, чтобы зарегистрировать новые переменные среды.
После установки этих переменных вы сможете использовать в коде объект DefaultAzureCredential для проверки подлинности выбранного вами клиента службы.
Примечание.
Итоговый код для этого краткого руководства можно найти на сайте GitHub.
Установка
Создание нового приложения C#
В окне консоли (cmd, PowerShell или Bash) выполните команду dotnet new
, чтобы создать консольное приложение с именем ActiveDirectoryQuickstart
. Эта команда создает простой проект Hello World на языке C# с одним файлом исходного кода: Program.cs
.
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
Добавьте в Program.cs
указанные ниже директивы using
, чтобы использовать пакеты SDK для Azure Identity и службы хранилища Azure.
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.
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
Примечание.
Итоговый код для этого краткого руководства можно найти на сайте 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
Добавьте следующие директивы require
в начало файла index.js
, чтобы использовать пакеты SDK для Azure Identity и службы хранилища Azure.
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();
Создание удостоверения и выпуск маркера с помощью субъектов-служб
Далее мы напишем функцию, которая создает новое удостоверение и выпускает маркер для этого удостоверения. Мы воспользуемся ею позже, чтобы протестировать настройку субъекта-службы.
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
);
}
Создание функции 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 также потребуется следующее:
- комплект SDK для Java (JDK) версии 8 или более поздней версии.
- Apache Maven.
Примечание.
Итоговый код для этого краткого руководства можно найти на сайте GitHub.
Установка
Создание нового приложения Java
Откройте терминал или командное окно. Перейдите в каталог, в котором нужно создать приложение Java. Выполните приведенную ниже команду, чтобы создать проект Java из шаблона maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Вы заметите, что задача generate создала каталог с тем же именем, что и у artifactId
. В этом каталоге каталог src/main/java содержит исходный код проекта, pom.xml
содержит источник теста, а файл src/test/java directory
является объектной моделью проекта (POM).
Установка пакета
Откройте файл pom.xml в текстовом редакторе. Добавьте приведенный ниже элемент зависимости в группу зависимостей.
<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
Добавьте в код указанные ниже директивы import
, чтобы использовать пакеты SDK для Azure Identity и Azure Communication.
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.
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
Примечание.
Итоговый код для этого краткого руководства можно найти на сайте 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
Добавьте следующие инструкции import
в начало файла, чтобы использовать установленные пакеты SDK.
from azure.identity import DefaultAzureCredential
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.sms import SmsClient
Создание DefaultAzureCredential
Мы будем использовать DefaultAzureCredential. Эти учетные данные подходят как для рабочих сред, так и для сред разработки. Так как мы будем использовать их в рамках этого краткого руководства, мы создадим их в начале файла.
credential = DefaultAzureCredential()
Создание удостоверения и выпуск маркера с помощью субъектов-служб
Теперь мы добавим код, который использует созданные учетные данные для выдачи маркера доступа 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.
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
)
Написание кода функции main
С созданными функциями мы теперь можем написать код функции main, которая будет вызывать написанные ранее функции.
# 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