アクセス トークンの作成と管理
アクセス トークンを使うと、Azure Communication Services SDK は、特定の ID として、Azure Communication Services に対して直接認証を行うことができます。 ユーザーがアプリケーション内の通話またはチャット スレッドに参加できるようにする場合は、アクセス トークンを作成する必要があります。
この記事では、Azure Communication Services SDK を使って ID を作成し、アクセス トークンを管理する方法を説明します。 運用のユース ケースでは、「モバイル アーキテクチャの設計」で説明されているように、サーバー側のサービスでアクセス トークンを生成することをお勧めします。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- アクティブな Communication Services リソースと接続文字列。 Communication Services のリソースを作成する。
- Azure CLI をインストールします。
環境を設定する
拡張機能の追加
az extension
コマンドを使って、Azure CLI 用の Azure Communication Services 拡張機能を追加します。
az extension add --name communication
Azure CLI へのサインイン
Azure CLI にサインインする必要があります。 ターミナルから az login
コマンドを実行してサインインし、資格情報を入力できます。
(省略可能) 接続文字列を渡さずに Azure CLI の ID 操作を使用する
--connection_string
を使用して接続文字列を渡すことなく Azure CLI の ID 操作を使用するために、AZURE_COMMUNICATION_CONNECTION_STRING
環境変数を構成できます。 環境変数を構成するには、コンソール ウィンドウを開き、次のタブでオペレーティン グシステムを選択します。 <yourConnectionString>
は、実際の接続文字列に置き換えてください。
コンソール ウィンドウを開き、次のコマンドを入力します。
setx AZURE_COMMUNICATION_CONNECTION_STRING "<yourConnectionString>"
環境変数を追加した後、コンソール ウィンドウを含め、環境変数を読み取る必要がある実行中のプログラムの再起動が必要になる場合があります。 たとえば、Visual Studio をエディターとして使用している場合、サンプルを実行する前に Visual Studio を再起動します。
環境変数にアクセス トークンを格納する
環境変数を構成するには、コンソール ウィンドウを開き、以下のタブからお使いのオペレーティン グシステムを選択します。 <yourAccessToken>
は、実際のアクセス トークンに置き換えてください。
コンソール ウィンドウを開き、次のコマンドを入力します。
setx AZURE_COMMUNICATION_ACCESS_TOKEN "<yourAccessToken>"
環境変数を追加した後、コンソール ウィンドウを含め、環境変数を読み取る必要がある実行中のプログラムの再起動が必要になる場合があります。 たとえば、Visual Studio をエディターとして使用している場合、サンプルを実行する前に Visual Studio を再起動します。
操作
ID の作成
アクセス トークンを作成するには、ID が必要です。 Azure Communication Services では、軽量の ID ディレクトリが保持されます。 user create
コマンドを使用して、一意の Id
を持つディレクトリに新しいエントリを作成します。 ID は、後でアクセス トークンを発行するのに必要になります。
az communication identity user create --connection-string "<yourConnectionString>"
<yourConnectionString>
を対象の接続文字列に置き換えてください。
ID を作成し、同じ要求内でアクセス トークンを発行する
次のコマンドを実行して、Communication Services ID を作成し、同時にそのアクセス トークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細は、「Azure Communication Services への認証」でサポートされているアクションの一覧を参照してください。
az communication identity token issue --scope chat --connection-string "<yourConnectionString>"
コードで次の置き換えを行います。
<yourConnectionString>
を対象の接続文字列に置き換えてください。
アクセス トークンの発行
次のコマンドを実行して、Communication Services ID のアクセス トークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細は、「Azure Communication Services への認証」でサポートされているアクションの一覧を参照してください。
az communication identity token issue --scope chat --user "<userId>" --connection-string "<yourConnectionString>"
コードで次の置き換えを行います。
<yourConnectionString>
を対象の接続文字列に置き換えてください。<userId>
を対象のユーザー ID に置き換えてください。
アクセス トークンは有効期間の短い資格情報であるため、再発行が必要になります。 そうしなければ、アプリケーションのユーザーの利便性が損なわれる可能性があります。 expires_on
応答プロパティは、アクセス トークンの有効期間を示します。
複数のスコープを持つアクセス トークンを発行する
次のコマンドを実行して、Communication Services ID の複数のスコープを持つアクセス トークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細については、「ID モデル」のサポートされるアクションの一覧を参照してください。
az communication identity token issue --scope chat voip --user "<userId>" --connection-string "<yourConnectionString>"
コードで次の置き換えを行います。
<yourConnectionString>
を対象の接続文字列に置き換えてください。<userId>
を対象のユーザー ID に置き換えてください。
アクセス トークンは有効期間の短い資格情報であるため、再発行が必要になります。 そうしなければ、アプリケーションのユーザーの利便性が損なわれる可能性があります。 expires_on
応答プロパティは、アクセス トークンの有効期間を示します。
Teams ユーザーの Microsoft Entra アクセス トークンを通信 ID アクセス トークンと交換する
token get-for-teams-user
コマンドを使用して、Azure Communication Services SDK で使用できる Teams ユーザーのアクセス トークンを発行します。
az communication identity token get-for-teams-user --aad-token "<yourAadToken>" --client "<yourAadApplication>" --aad-user "<yourAadUser>" --connection-string "<yourConnectionString>"
コードで次の置き換えを行います。
<yourConnectionString>
を対象の接続文字列に置き換えてください。<yourAadUser>
をお使いの Microsoft Entra userId に置き換えます。<yourAadApplication>
を Microsoft Entra アプリケーション ID に置き換えます。<yourAadToken>
をお使いの Microsoft Entra アクセス トークンに置き換えます。
アクセス トークンの取り消し
アクセス トークンを明示的に取り消すことが必要な場合があります。 例えば、アプリケーションのユーザーがサービスの認証に使用するパスワードを変更した場合などに行います。 token revoke
コマンドを使用すると、ID に対して発行されたすべてのアクティブなアクセス トークンを無効にできます。
az communication identity token revoke --user "<userId>" --connection-string "<yourConnectionString>"
コードで次の置き換えを行います。
<yourConnectionString>
を対象の接続文字列に置き換えてください。<userId>
を対象のユーザー ID に置き換えてください。
ID の削除
ID を削除すると、有効なアクセス トークンがすべて取り消され、その ID に対するアクセス トークンが今後発行されなくなります。 そうすると、その ID に関連付けられているすべての永続コンテンツも削除されます。
az communication identity user delete --user "<userId>" --connection-string "<yourConnectionString>"
コードで次の置き換えを行います。
<yourConnectionString>
を対象の接続文字列に置き換えてください。<userId>
を対象のユーザー ID に置き換えてください。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- お使いのオペレーティング システムに対応した最新の .NET Core SDK バージョン。
- アクティブな Communication Services リソースと接続文字列。 Communication Services リソースを作成します。
最終的なコード
最終的なコードは GitHub にあります。
環境を設定する
新しい C# アプリケーションを作成する
cmd、PowerShell、Bash などのコマンド プロンプト ウィンドウで、
dotnet new
コマンドを実行して、AccessTokensQuickstart
という名前の新しいコンソール アプリを作成します。 このコマンドにより、1 つのソース ファイルProgram.cs
を使用する簡単な Hello World C# プロジェクトが作成されます。dotnet new console -o AccessTokensQuickstart
ディレクトリを、新しく作成したアプリ フォルダーに変更し、
dotnet build
コマンドを使用して自分のアプリケーションをコンパイルします。cd AccessTokensQuickstart dotnet build
Hello World
という簡単な出力が表示されます。 正しく表示される場合は、セットアップは機能しており、Azure Communication Services のコードの記述を始められます。
パッケージをインストールする
まだアプリケーション ディレクトリにいる間に、dotnet add package
コマンドを使用して、.NET 用の Azure Communication Services ID ライブラリ パッケージをインストールします。
dotnet add package Azure.Communication.Identity
アプリのフレームワークを設定する
プロジェクト ディレクトリで、次の手順を行います。
- テキスト エディターで
Program.cs
ファイルを開きます。 using
ディレクティブを追加して、Azure.Communication.Identity
名前空間を含めます。- 非同期コードをサポートするには、
Main
メソッドの宣言を更新します。
開始するには、次のコードを実行します。
using System;
using Azure;
using Azure.Core;
using Azure.Communication.Identity;
namespace AccessTokensQuickstart
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
Console.WriteLine("Azure Communication Services - Access Tokens Quickstart");
// Quickstart code goes here
}
}
}
クライアントを認証する
接続文字列を使用して CommunicationIdentityClient
を初期化します。 Main
メソッドに追加した次のコードは、COMMUNICATION_SERVICES_CONNECTION_STRING
という名前の環境変数からリソースの接続文字列を取得します。
詳しくは、「Communication Services のリソースを作成して管理する」 > 「接続文字列を格納する」をご覧ください。
// This code demonstrates how to retrieve your connection string
// from an environment variable.
string connectionString = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
var client = new CommunicationIdentityClient(connectionString);
また、以下のコードを実行することで、エンドポイントとアクセスキーを分離することができます。
// This code demonstrates how to fetch your endpoint and access key
// from an environment variable.
string endpoint = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_ENDPOINT");
string accessKey = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_ACCESSKEY");
var client = new CommunicationIdentityClient(new Uri(endpoint), new AzureKeyCredential(accessKey));
Microsoft Entra アプリケーションを既に設定してある場合は、Microsoft Entra ID を使って認証を行うことができます。
TokenCredential tokenCredential = new DefaultAzureCredential();
var client = new CommunicationIdentityClient(new Uri(endpoint), tokenCredential);
ID の作成
アクセス トークンを作成するには、ID が必要です。 Azure Communication Services では、軽量の ID ディレクトリが保持されます。 createUser
メソッドを使用して、一意の Id
を持つディレクトリに新しいエントリを作成します。 後で ID を使ってアクセス トークンを発行します。
var identityResponse = await client.CreateUserAsync();
var identity = identityResponse.Value;
Console.WriteLine($"\nCreated an identity with ID: {identity.Id}");
受け取った ID とアプリケーション ユーザーへのマッピングを格納します (たとえば、アプリケーション サーバー データベースに格納します)。
アクセス トークンを発行する
Communication Services の ID を取得したら、GetToken
メソッドを使用してその ID 用のアクセストークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細については、「ID モデル」のサポートされるアクションの一覧を参照してください。 また、Azure Communication Service の ID の文字列表現に基づいて、communicationUser
の新しいインスタンスを構築することもできます。
// Issue an access token with a validity of 24 hours and the "voip" scope for an identity
var tokenResponse = await client.GetTokenAsync(identity, scopes: new [] { CommunicationTokenScope.VoIP });
// Get the token from the response
var token = tokenResponse.Value.Token;
var expiresOn = tokenResponse.Value.ExpiresOn;
Console.WriteLine($"\nIssued an access token with 'voip' scope that expires at {expiresOn}:");
Console.WriteLine(token);
アクセス トークンは有効期間の短い資格情報であるため、再発行が必要になります。 そうしないと、アプリケーションのユーザー エクスペリエンスが損なわれる可能性があります。 expiresOn
プロパティは、アクセス トークンの有効期間を示します。
カスタム トークンの有効期限を設定する
既定のトークンの有効期限は 24 時間ですが、省略可能なパラメーター tokenExpiresIn
に 1 時間から 24 時間の値を指定することで有効期限を構成できます。 新しいトークンを要求するときは、トークンの有効期限に対して通信セッションの予想される一般的な長さを指定します。
// Issue an access token with a validity of an hour and the "voip" scope for an identity
TimeSpan tokenExpiresIn = TimeSpan.FromHours(1);
CommunicationTokenScope[] scopes = new[] { CommunicationTokenScope.VoIP };
var tokenResponse = await client.GetTokenAsync(identity, scopes, tokenExpiresIn);
同じ要求で id を作成し、トークンを発行する
CreateUserAndTokenAsync
メソッドを使用して、Communication Services ID を作成し、同時にそのアクセス トークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細は、「Azure Communication Services への認証」でサポートされているアクションの一覧を参照してください。
// Issue an identity and an access token with a validity of 24 hours and the "voip" scope for the new identity
var identityAndTokenResponse = await client.CreateUserAndTokenAsync(scopes: new[] { CommunicationTokenScope.VoIP });
// Retrieve the identity, token, and expiration date from the response
var identity = identityAndTokenResponse.Value.User;
var token = identityAndTokenResponse.Value.AccessToken.Token;
var expiresOn = identityAndTokenResponse.Value.AccessToken.ExpiresOn;
Console.WriteLine($"\nCreated an identity with ID: {identity.Id}");
Console.WriteLine($"\nIssued an access token with 'voip' scope that expires at {expiresOn}:");
Console.WriteLine(token);
アクセス トークンを更新する
アクセス トークンを更新するには、CommunicationUserIdentifier
オブジェクトのインスタンスを GetTokenAsync
に渡します。 この Id
を保存してある場合、新しい CommunicationUserIdentifier
を作成する必要があるときは、次のように保存されている Id
を CommunicationUserIdentifier
コンストラクターに渡して、それを行うことができます。
var identityToRefresh = new CommunicationUserIdentifier(identity.Id);
var tokenResponse = await client.GetTokenAsync(identityToRefresh, scopes: new [] { CommunicationTokenScope.VoIP });
アクセス トークンの取り消し
アクセス トークンを明示的に取り消すことが必要な場合があります。 たとえば、アプリケーションのユーザーがサービスへの認証に使うパスワードを変更するときなどです。 RevokeTokensAsync
メソッドを使用すると、ID に対して発行されたすべてのアクティブなアクセス トークンを無効にできます。
await client.RevokeTokensAsync(identity);
Console.WriteLine($"\nSuccessfully revoked all access tokens for identity with ID: {identity.Id}");
ID の削除
ID を削除すると、有効なアクセス トークンがすべて取り消され、それ以降その ID に対するアクセス トークンは発行されなくなります。 そうすると、その ID に関連付けられているすべての永続コンテンツも削除されます。
await client.DeleteUserAsync(identity);
Console.WriteLine($"\nDeleted the identity with ID: {identity.Id}");
コードの実行
アクセス トークンの作成を終えたら、dotnet run
コマンドを使ってアプリケーション ディレクトリからアプリケーションを実行できます。
dotnet run
アプリの出力には、完了した各アクションが表示されます。
Azure Communication Services - Access Tokens Quickstart
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Issued an access token with 'voip' scope that expires at 10/11/2022 7:34:29 AM +00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52
Issued an access token with 'voip' scope that expires at 10/11/2022 7:34:29 AM +00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Node.js アクティブ LTS およびメンテナンス LTS バージョン (8.11.1 および 10.14.1 を推奨)。
- アクティブな Communication Services リソースと接続文字列。 Communication Services リソースを作成します。
最終的なコード
最終的なコードは GitHub にあります。
環境を設定する
新しい Node.js アプリケーションを作成する
ターミナルまたはコマンド プロンプト ウィンドウで、アプリ用の新しいディレクトリを作成し、それを開きます。
mkdir access-tokens-quickstart && cd access-tokens-quickstart
既定の設定で
npm init -y
を実行して、package.json
ファイルを作成します。npm init -y
パッケージをインストールする
npm install
コマンドを使用して、JavaScript 用の Azure Communication Services Identity SDK をインストールします。
npm install @azure/communication-identity@latest --save
--save
オプションを使用すると、package.json
ファイル内の依存関係としてライブラリが表示されます。
アプリのフレームワークを設定する
プロジェクト ディレクトリに
issue-access-token.js
という名前のファイルを作成し、次のコードを追加します。const { CommunicationIdentityClient } = require('@azure/communication-identity'); const main = async () => { console.log("Azure Communication Services - Access Tokens Quickstart") // Quickstart code goes here }; main().catch((error) => { console.log("Encountered an error"); console.log(error); })
クライアントを認証する
接続文字列を使用して CommunicationIdentityClient
をインスタンス化します。 Main
メソッドに追加した次のコードは、COMMUNICATION_SERVICES_CONNECTION_STRING
という名前の環境変数からリソースの接続文字列を取得します。
詳しくは、「Communication Services のリソースを作成して管理する」 > 「接続文字列を格納する」をご覧ください。
// This code demonstrates how to fetch your connection string
// from an environment variable.
const connectionString = process.env['COMMUNICATION_SERVICES_CONNECTION_STRING'];
// Instantiate the identity client
const identityClient = new CommunicationIdentityClient(connectionString);
また、以下のコードを実行することで、エンドポイントとアクセスキーを分離することができます。
// This code demonstrates how to fetch your endpoint and access key
// from an environment variable.
const endpoint = process.env["COMMUNICATION_SERVICES_ENDPOINT"];
const accessKey = process.env["COMMUNICATION_SERVICES_ACCESSKEY"];
// Create the credential
const tokenCredential = new AzureKeyCredential(accessKey);
// Instantiate the identity client
const identityClient = new CommunicationIdentityClient(endpoint, tokenCredential)
Microsoft Entra アプリケーションを既に設定してある場合は、Microsoft Entra ID を使って認証を行うことができます。
const endpoint = process.env["COMMUNICATION_SERVICES_ENDPOINT"];
const tokenCredential = new DefaultAzureCredential();
const identityClient = new CommunicationIdentityClient(endpoint, tokenCredential);
ID の作成
アクセス トークンを作成するには、ID が必要です。 Azure Communication Services では、軽量の ID ディレクトリが保持されます。 createUser
メソッドを使用して、一意の Id
を持つディレクトリに新しいエントリを作成します。 後でその ID を使ってアクセス トークンを発行する必要があります。
let identityResponse = await identityClient.createUser();
console.log(`\nCreated an identity with ID: ${identityResponse.communicationUserId}`);
受信した ID をアプリケーションのユーザーにマッピングして保存します (例えば、アプリケーション サーバーのデータベースに保存します)。
アクセス トークンを発行する
getToken
メソッドを使用して、Communication Services の ID のアクセストークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細については、「ID モデル」のサポートされるアクションの一覧を参照してください。 また、Azure Communication Service の ID の文字列表現に基づいて、communicationUser
の新しいインスタンスを構築することもできます。
// Issue an access token with a validity of 24 hours and the "voip" scope for an identity
let tokenResponse = await identityClient.getToken(identityResponse, ["voip"]);
// Get the token and its expiration date from the response
const { token, expiresOn } = tokenResponse;
console.log(`\nIssued an access token with 'voip' scope that expires at ${expiresOn}:`);
console.log(token);
アクセス トークンは有効期間の短い資格情報であるため、再発行が必要になります。 そうしないと、アプリケーションのユーザー エクスペリエンスが損なわれる可能性があります。 expiresOn
プロパティは、アクセス トークンの有効期間を示します。
カスタム トークンの有効期限を設定する
既定のトークンの有効期限は 24 時間 (1440 分) ですが、省略可能なパラメーター tokenExpiresInMinutes
に 60 分から 1440 分の値を指定することで有効期限を構成できます。 新しいトークンを要求するときは、トークンの有効期限に対して通信セッションの予想される一般的な長さを指定します。
// Issue an access token with a validity of an hour and the "voip" scope for an identity
const tokenOptions: GetTokenOptions = { tokenExpiresInMinutes: 60 };
let tokenResponse = await identityClient.getToken
(identityResponse, ["voip"], tokenOptions);
ID を作成し、1 つのメソッド呼び出しでトークンを発行する
createUserAndToken
メソッドを使用して、Communication Services ID を作成し、同時にそのアクセス トークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 それを voip
スコープで作成します。
// Issue an identity and an access token with a validity of 24 hours and the "voip" scope for the new identity
let identityTokenResponse = await identityClient.createUserAndToken(["voip"]);
// Get the token, its expiration date, and the user from the response
const { token, expiresOn, user } = identityTokenResponse;
console.log(`\nCreated an identity with ID: ${user.communicationUserId}`);
console.log(`\nIssued an access token with 'voip' scope that expires at ${expiresOn}:`);
console.log(token);
アクセス トークンを更新する
トークンには有効期限があるので、更新する必要があります。 トークンを更新するには、トークンの発行に使ったのと同じ ID を指定して getToken
をもう一度呼び出します。 また、更新されたトークンの scopes
も指定する必要があります。
// Value of identityResponse represents the Azure Communication Services identity stored during identity creation and then used to issue the tokens being refreshed
let refreshedTokenResponse = await identityClient.getToken(identityResponse, ["voip"]);
アクセス トークンの取り消し
アクセス トークンを取り消すことが必要な場合があります。 たとえば、アプリケーションのユーザーがサービスへの認証に使うパスワードを変更するときにそれを行います。 revokeTokens
メソッドを使用すると、ID に対して発行されたすべてのアクティブなアクセス トークンを無効にできます。
await identityClient.revokeTokens(identityResponse);
console.log(`\nSuccessfully revoked all access tokens for identity with ID: ${identityResponse.communicationUserId}`);
ID の削除
ID を削除すると、有効なアクセス トークンがすべて取り消され、それ以降その ID に対するアクセス トークンは発行されなくなります。 そうすると、その ID に関連付けられているすべての永続コンテンツも削除されます。
await identityClient.deleteUser(identityResponse);
console.log(`\nDeleted the identity with ID: ${identityResponse.communicationUserId}`);
コードの実行
コンソール プロンプトから、issue-access-token.js ファイルのあるディレクトリに移動し、以下の node
コマンドを実行してアプリを実行します。
node ./issue-access-token.js
アプリの出力では、完了した各アクションが説明されています。
Azure Communication Services - Access Tokens Quickstart
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52
Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Python 3.8 以降。
- アクティブな Communication Services リソースと接続文字列。 Communication Services リソースを作成します。
最終的なコード
最終的なコードは GitHub にあります。
環境を設定する
新しい Python アプリケーションを作成する
ターミナルまたはコマンド プロンプト ウィンドウで、アプリ用の新しいディレクトリを作成し、それを開きます。
mkdir access-tokens-quickstart && cd access-tokens-quickstart
テキスト エディターを使って、プロジェクトのルート ディレクトリに
issue-access-tokens.py
というファイルを作成します。 次に、基本的な例外処理を含め、プログラムの構造を追加します。 すべてのソース コードをこのファイルに追加します。import os from datetime import timedelta from azure.communication.identity import CommunicationIdentityClient, CommunicationUserIdentifier try: print("Azure Communication Services - Access Tokens Quickstart") # Quickstart code goes here except Exception as ex: print("Exception:") print(ex)
パッケージをインストールする
アプリケーション ディレクトリにいる間に、pip install
コマンドを使って、Azure Communication Services Identity SDK for Python パッケージをインストールします。
pip install azure-communication-identity
クライアントを認証する
接続文字列を使用して CommunicationIdentityClient
をインスタンス化します。 try
ブロックに追加した次のコードは、COMMUNICATION_SERVICES_CONNECTION_STRING
という名前の環境変数からリソースの接続文字列を取得します。
詳しくは、「Communication Services のリソースを作成して管理する」 > 「接続文字列を格納する」をご覧ください。
# This code demonstrates how to retrieve your connection string
# from an environment variable.
connection_string = os.environ["COMMUNICATION_SERVICES_CONNECTION_STRING"]
# Instantiate the identity client
client = CommunicationIdentityClient.from_connection_string(connection_string)
または、Microsoft Entra アプリケーションを既に設定してある場合は、Microsoft Entra ID を使って認証を行うことができます。
endpoint = os.environ["COMMUNICATION_SERVICES_ENDPOINT"]
client = CommunicationIdentityClient(endpoint, DefaultAzureCredential())
ID の作成
アクセス トークンを作成するには、ID が必要です。 Azure Communication Services では、軽量の ID ディレクトリが保持されます。 create_user
メソッドを使用して、一意の Id
を持つディレクトリに新しいエントリを作成します。 ID は、後でアクセス トークンを発行するために必要になります。
identity = client.create_user()
print("\nCreated an identity with ID: " + identity.properties['id'])
受け取った ID とアプリケーション ユーザーへのマッピングを格納します (たとえば、アプリケーション サーバー データベースに格納します)。
アクセス トークンを発行する
get_token
メソッドを使用して、Communication Services の ID のアクセストークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細については、「ID モデル」のサポートされるアクションの一覧を参照してください。 また、Azure Communication Service のアイデンティティの文字列表現に基づいて、パラメーター CommunicationUserIdentifier
の新しいインスタンスを構築することもできます。
# Issue an access token with a validity of 24 hours and the "voip" scope for an identity
token_result = client.get_token(identity, ["voip"])
print("\nIssued an access token with 'voip' scope that expires at " + token_result.expires_on + ":")
print(token_result.token)
アクセス トークンは有効期間の短い資格情報であるため、再発行が必要になります。 そうしないと、アプリケーションのユーザー エクスペリエンスが損なわれる可能性があります。 expires_on
応答プロパティは、アクセス トークンの有効期間を示します。
カスタム トークンの有効期限を設定する
既定のトークンの有効期限は 24 時間ですが、省略可能なパラメーター token_expires_in
に 1 時間から 24 時間の値を指定することで有効期限を構成できます。 新しいトークンを要求するときは、トークンの有効期限に対して通信セッションの予想される一般的な長さを指定します。
# Issue an access token with a validity of an hour and the "voip" scope for an identity
token_expires_in = timedelta(hours=1)
token_result = client.get_token(identity, ["voip"], token_expires_in=token_expires_in)
ID を作成し、同じ要求内でアクセス トークンを発行する
create_user_and_token
メソッドを使用して、Communication Services ID を作成し、同時にそのアクセス トークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細は、「Azure Communication Services への認証」でサポートされているアクションの一覧を参照してください。
# Issue an identity and an access token with a validity of 24 hours and the "voip" scope for the new identity
identity_token_result = client.create_user_and_token(["voip"])
# Get the token details from the response
identity = identity_token_result[0]
token = identity_token_result[1].token
expires_on = identity_token_result[1].expires_on
print("\nCreated an identity with ID: " + identity.properties['id'])
print("\nIssued an access token with 'voip' scope that expires at " + expires_on + ":")
print(token)
アクセス トークンを更新する
アクセス トークンを更新するには、CommunicationUserIdentifier
オブジェクトを使用し、既存の ID を渡してトークンを再発行します。
# The existingIdentity value represents the Communication Services identity that's stored during identity creation
identity = CommunicationUserIdentifier(existingIdentity)
token_result = client.get_token(identity, ["voip"])
アクセス トークンの取り消し
アクセス トークンを明示的に取り消すことが必要な場合があります。 たとえば、アプリケーションのユーザーがサービスへの認証に使うパスワードを変更するときなどです。 revoke_tokens
メソッドを使用すると、ID に対して発行されたすべてのアクティブなアクセス トークンを無効にできます。
client.revoke_tokens(identity)
print("\nSuccessfully revoked all access tokens for identity with ID: " + identity.properties['id'])
ID の削除
ID を削除すると、有効なアクセス トークンがすべて取り消され、その ID に対するアクセス トークンが今後発行されなくなります。 そうすると、その ID に関連付けられているすべての永続コンテンツも削除されます。
client.delete_user(identity)
print("\nDeleted the identity with ID: " + identity.properties['id'])
コードの実行
コンソール プロンプトから、issue-access-tokens.py
ファイルを含むディレクトリに移動し、次の python
コマンドを実行してアプリを実行します。
python ./issue-access-tokens.py
生成される出力では、完了した各アクションが説明されています。
Azure Communication Services - Access Tokens Quickstart
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52
Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Java Development Kit (JDK) バージョン 8 以降。
- Apache Maven。
- アクティブな Communication Services リソースと接続文字列。 Communication Services リソースを作成します。
最終的なコード
最終的なコードは 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
ディレクトリにはテスト ソースが含まれ、pom.xml
ファイルはプロジェクトのプロジェクト オブジェクト モデル (POM) です。 このファイルは、プロジェクトの構成パラメーターに使用されます。
Communication Services パッケージをインストールする
テキスト エディターで pom.xml
ファイルを開きます。 依存関係のグループに、次の dependency 要素を追加します。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-identity</artifactId>
<version>[1.4.0,)</version>
</dependency>
このコードでは、Maven に、後に使う必要がある Communication Services Identity SDK のインストールを指示しています。
アプリのフレームワークを設定する
プロジェクト ディレクトリで、次の手順を行います。
/src/main/java/com/communication/quickstart
ディレクトリに移動します。- エディターで
App.java
ファイルを開きます。 System.out.println("Hello world!");
ステートメントを置き換えますimport
ディレクティブを追加します。
次のコードを使用して開始します。
package com.communication.quickstart;
import com.azure.communication.common.*;
import com.azure.communication.identity.*;
import com.azure.communication.identity.models.*;
import com.azure.core.credential.*;
import java.io.IOException;
import java.time.*;
import java.util.*;
public class App
{
public static void main( String[] args ) throws IOException
{
System.out.println("Azure Communication Services - Access Tokens Quickstart");
// Quickstart code goes here
}
}
クライアントを認証する
リソースのアクセス キーとエンドポイントを使用して、CommunicationIdentityClient
をインスタンス化します。 詳しくは、「Communication Services のリソースを作成して管理する」 > 「接続文字列を格納する」をご覧ください。
クライアントは、com.azure.core.http.HttpClient
インターフェイスを実装する任意のカスタム HTTP クライアントを使用して初期化することもできます。
App.java
ファイルで、main
メソッドに次のコードを追加します。
// You can find your endpoint and access key from your resource in the Azure portal
String endpoint = "https://<RESOURCE_NAME>.communication.azure.com";
String accessKey = "SECRET";
CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(accessKey))
.buildClient();
エンドポイントとアクセス キーを指定する代わりに、connectionString()
メソッドを使って接続文字列全体を指定することができます。
// You can find your connection string from your Communication Services resource in the Azure portal
String connectionString = "<connection_string>";
CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
.connectionString(connectionString)
.buildClient();
Microsoft Entra アプリケーションを既に設定してある場合は、Microsoft Entra ID を使って認証を行うことができます。
String endpoint = "https://<RESOURCE_NAME>.communication.azure.com";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
.endpoint(endpoint)
.credential(credential)
.buildClient();
ID の作成
アクセス トークンを作成するには、ID が必要です。 Azure Communication Services では、軽量の ID ディレクトリが保持されます。 createUser
メソッドを使用して、一意の Id
を持つディレクトリに新しいエントリを作成します。
CommunicationUserIdentifier user = communicationIdentityClient.createUser();
System.out.println("\nCreated an identity with ID: " + user.getId());
作成された ID は、後でアクセス トークンを発行するために必要になります。 受信した ID をアプリケーションのユーザーにマッピングして保存します (例えば、アプリケーション サーバーのデータベースに保存します)。
アクセス トークンを発行する
getToken
メソッドを使用して、Communication Services の ID のアクセストークンを発行します。 scopes
パラメーターは、アクセス トークンのアクセス許可とロールのセットを定義します。 詳細については、「ID モデル」のサポートされるアクションの一覧を参照してください。
次のコードでは、前のステップで作成したユーザー変数を使って、トークンを取得します。
// Issue an access token with a validity of 24 hours and the "voip" scope for a user identity
List<CommunicationTokenScope> scopes = new ArrayList<>(Arrays.asList(CommunicationTokenScope.VOIP));
AccessToken accessToken = communicationIdentityClient.getToken(user, scopes);
OffsetDateTime expiresAt = accessToken.getExpiresAt();
String token = accessToken.getToken();
System.out.println("\nIssued an access token with 'voip' scope that expires at: " + expiresAt + ": " + token);
アクセス トークンは有効期間の短い資格情報であるため、再発行が必要になります。 そうしないと、アプリケーションのユーザー エクスペリエンスが損なわれる可能性があります。 expiresAt
プロパティは、アクセス トークンの有効期間を示します。
カスタム トークンの有効期限を設定する
既定のトークンの有効期限は 24 時間ですが、省略可能なパラメーター tokenExpiresIn
に 1 時間から 24 時間の値を指定することで有効期限を構成できます。 新しいトークンを要求するときは、トークンの有効期限に対して通信セッションの予想される一般的な長さを指定します。
// Issue an access token with a validity of an hour and the "voip" scope for a user identity
List<CommunicationTokenScope> scopes = new ArrayList<>(Arrays.asList(CommunicationTokenScope.VOIP));
Duration tokenExpiresIn = Duration.ofHours(1);
AccessToken accessToken = communicationIdentityClient.getToken(user, scopes, tokenExpiresIn);
1 つの要求で ID を作成し、トークンを発行する
また、'createUserAndToken' メソッドを使って、ディレクトリに一意の Id
で新しいエントリを作成し、同時にアクセストークンを発行することもできます。
//Create an identity and issue token with a validity of 24 hours in one call
List<CommunicationTokenScope> scopes = Arrays.asList(CommunicationTokenScope.CHAT);
CommunicationUserIdentifierAndToken result = communicationIdentityClient.createUserAndToken(scopes);
CommunicationUserIdentifier user = result.getUser();
System.out.println("\nCreated a user identity with ID: " + user.getId());
AccessToken accessToken = result.getUserToken();
OffsetDateTime expiresAt = accessToken.getExpiresAt();
String token = accessToken.getToken();
System.out.println("\nIssued an access token with 'chat' scope that expires at: " + expiresAt + ": " + token);
アクセス トークンを更新する
アクセス トークンを更新するには、CommunicationUserIdentifier
オブジェクトを使用して再発行します。
// existingIdentity represents the Communication Services identity that's stored during identity creation
CommunicationUserIdentifier identity = new CommunicationUserIdentifier(existingIdentity.getId());
AccessToken response = communicationIdentityClient.getToken(identity, scopes);
アクセス トークンを取り消す
アクセス トークンを明示的に取り消すことが必要な場合があります。 例えば、アプリケーションのユーザーがサービスの認証に使用するパスワードを変更した場合などに行います。 revokeTokens
メソッドを使用すると、特定のユーザーのすべてのアクティブなアクセス トークンを無効にできます。 以下のコードでは、以前に作成したユーザーを使用しています。
communicationIdentityClient.revokeTokens(user);
System.out.println("\nSuccessfully revoked all access tokens for user identity with ID: " + user.getId());
ID の削除
ID を削除すると、有効なアクセス トークンがすべて取り消され、その ID に対するアクセス トークンが今後発行されなくなります。 そうすると、その ID に関連付けられているすべての永続コンテンツも削除されます。
communicationIdentityClient.deleteUser(user);
System.out.println("\nDeleted the user identity with ID: " + user.getId());
コードの実行
pom.xml
ファイルが含まれるディレクトリに移動します。次の
mvn
コマンドを使ってプロジェクトをコンパイルします:mvn compile
パッケージをビルドします。
mvn package
次の
mvn
コマンドを実行して、アプリを実行します。mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false
出力では、完了した各アクションが説明されています。
Azure Communication Services - Access Tokens Quickstart
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.902864800Z:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52
Issued an access token with 'chat' scope that expires at 2022-10-11T07:34:29.902864800Z:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw
Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502
前提条件
アクセス トークンの作成
Azure portal で、Communication Services リソースの [ID とユーザー アクセス トークン] ブレードに移動します。
アクセス トークンのスコープを選択します。 なし、1 つ、または複数のサービスを選択できます。
[Generate] \(生成) を選択します。
システムにより、ID と対応するユーザー アクセス トークンが生成されます。
これらの文字列をコピーし、サンプル アプリや他のテスト シナリオで使います。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料の Azure アカウントを作成します。
アクティブな Azure Communication Services リソース。 Communication Services リソースを作成します。
アクティブな Azure Logic Apps リソース (ロジック アプリ)。 使用するトリガーを指定して従量課金のロジック アプリ ワークフローを作成します。 現在、Azure Communication Services Identity コネクタではアクションのみが提供されているため、ロジック アプリには最低でもトリガーが必要となります。
ユーザーの作成
Azure Communication Services Identity コネクタを使って、ワークフローに新しいステップを追加します。 Power Automate フローを "編集" モードで開き、Power Automate で以下の手順を行います。
デザイナーを開きます。 新しいアクションを追加するステップで、[新しいステップ] を選びます。 または、ステップとステップの間に新しいアクションを追加するには、それらのステップ間の矢印をポイントして、プラス記号 (+) を選び、[アクションの追加] を選びます。
[操作を選択してください] 検索ボックスに、「Communication Services Identity」と入力します。 アクションの一覧から [ユーザーの作成] を選びます。
接続文字列を指定します。 それは、Microsoft Azure portal の Azure Communication Services リソース内にあります。 左側のパネルのメニューで [キー] オプションを選んで、接続文字列を表示します。
接続名を指定します。
[作成] をクリックします。
このアクションにより、Communication Services ユーザー ID であるユーザー ID が生成されます。 さらに、[詳細オプションの表示] をクリックして [トークン スコープ] を選ぶと、アクションにより、指定したスコープでアクセス トークンとその有効期限も生成されます。
ユーザー アクセス トークンを発行する
Communication Services の ID を生成したら、アクセス トークンを発行できます。 次の手順を完了します。
新しいアクションを追加し、検索ボックスに「Communication Services Identity」と入力します。 アクションの一覧から [ユーザー アクセス トークンを発行する] を選びます。
これで、前の「ユーザーを作成する」ステップで出力されたユーザー ID を使用できます。
トークン スコープを指定します (VoIP またはチャット)。 トークンと認証の詳細については、こちらをご覧ください。
システムによって、指定したスコープでアクセス トークンとその有効期限が生成されます。
ユーザー アクセス トークンを取り消す
Communication Services の ID を取得したら、[Revoke a user access token](ユーザー アクセス トークンの取り消し) アクションを使用してアクセス トークンを取り消すことができます。 次の手順を行います。
新しいアクションを追加し、検索ボックスに「Communication Services Identity」と入力します。 アクションの一覧から [ユーザー アクセス トークンを取り消す] を選びます。
ユーザー ID を指定します。
システムによって、指定したユーザーのユーザー アクセス トークンがすべて取り消されます。このアクションには出力はありません。
ユーザーの削除
Communication Services の ID を取得したら、[Delete a user](ユーザーの削除) アクションを使用してユーザーを削除することができます。 次の手順を完了します。
新しいアクションを追加し、検索ボックスに「Communication Services Identity」と入力します。 アクションの一覧から [ユーザーを削除する] を選びます。
ユーザー ID を指定します。
システムによって、指定したユーザーが削除され、そのユーザーのすべてのユーザー アクセス トークンが取り消されます。このアクションには出力はありません。
ロジック アプリをテストする
ワークフローを手動で開始するには、デザイナーのツール バーの [実行] を選びます。 ワークフローによって、ユーザーが作成され、そのユーザーのアクセス トークンが発行された後、それが削除されて、ユーザーが削除されます。
詳しくは、ワークフローの実行方法に関する記事をご覧ください。 ワークフローが正常に実行された後で、これらのアクションの出力を確認できます。
監視とメトリックに ID を使用する
このユーザー ID は、Azure Monitor によって収集されるログとメトリックの主キーとして機能します。 たとえば、あるユーザーのすべての呼び出しを表示するには、特定の Azure Communication Services ID (または複数の ID) を 1 人のユーザーにマップするように、認証を設定できます。
詳細については、以下を参照してください:
リソースをクリーンアップする
Communication Services サブスクリプションをクリーンアップして削除するには、リソースまたはリソース グループを削除します。 リソース グループを削除すると、それに関連付けられている他のリソースもすべて削除されます。 詳しくは、「Communication Services のリソースを作成して管理する」 > 「リソースをクリーンアップする」をご覧ください。
ロジック アプリ ワークフローと関連リソースのクリーンアップについては、「Azure portal を使って従量課金ロジック アプリのワークフローの例を作成する」 > 「リソースをクリーンアップする」をご覧ください。
次のステップ
この記事では、ユーザーを作成してユーザーを削除する方法について説明しました。 また、Azure Communication Services Identity コネクタを使ってユーザーにアクセス トークンを発行し、ユーザー アクセス トークンを削除する方法についても説明しました。 詳しくは、Azure Communication Services Identity コネクタに関する記事をご覧ください。
他のコネクタでトークンがどのように使用されるかを確認するには、Azure Communication Services を使用して Power Automate からチャット メッセージを送信する方法を参照してください。
Azure Communication Services Email コネクタを使用して電子メールを送信する方法については、「Azure Communication Services を使用して Power Automate で電子メール メッセージを送信する」を参照してください。