認証
REST 呼び出しを行うときは、正しく認証するためにいくつかの手順が必要です。 Azure Communication Services SDK ではこのプロセスが処理されますが、手動で要求を行う場合は、自分で処理する必要があります。
認証の種類
Azure Communication Services には 3 種類の認証があり、さまざまな目的で使用されます。
- SMS、ネットワーク トラバーサル、コール オートメーション、ID、およびアクセス トークン操作のアクセス キー認証。 アクセス キー認証は、信頼できるサービス環境で実行されているアプリケーションに適しています。
- Azure RBAC 認証
、Azure ロールを割り当てることで Azure RBAC を利用してリソースへのアクセスを制御します。 - チャットと通話のユーザー アクセス トークン認証 を
します。 ユーザー アクセス トークンを使用すると、クライアント アプリケーションが Azure Communication Services に対して直接認証されます。 これらのトークンは、作成したサーバー側トークン プロビジョニング サービスで生成されます。 その後、トークンを使用してチャットおよび通話クライアント ライブラリを初期化するクライアント デバイスに提供されます。
アクセス キー認証
アクセス キー認証は、エンド ユーザー アプリケーションによって要求が行われていない場合に使用されます。 信頼されたサービス環境内でこれらの要求を実行します。
この認証方法では、クライアントによって生成された ハッシュ ベースのメッセージ認証コード (HMAC)を使用して要求が署名されます。
作業を開始する前に、次のことを確認してください。
- Azure Communication Services アクセス キー
- Azure Communication Service エンドポイント
- 呼び出す URL パスと HTTP 動詞
- HMAC、SHA256 ハッシュを生成し、Base64 操作を実行できる開発環境。
これらの項目を取得したら、引き続き要求に署名できます。
HTTP 要求への署名
次の値を使用できることを確認します。
- HTTP 要求メソッド (
GET
やPUT
など) - RFC1123標準に従った要求の協定世界時 (UTC) タイムスタンプ
- HTTP 要求ホスト (RFC2396 で指定されている
<authority>
URI コンポーネント) - SHA256 アルゴリズムを使用してハッシュされた HTTP 要求本文
- HTTP 要求パス (
<path>
と<query>
は、RFC2396で指定されている?
コンポーネントによって連結されます)
Verb=<http_method> Timestamp=<current_datetime> Host=<uri_authority> ContentHash=SHA256(<request_body>) URIPathAndQuery=<uri_path>?<uri_query>
- HTTP 要求メソッド (
次の方法で値を連結して、署名する文字列を構築します。
StringToSign=Verb + "\n" URIPathAndQuery + "\n" Timestamp + ";" + Host + ";" + ContentHash
前の手順で作成した UTF-8 エンコード文字列の HMAC-256 署名を生成します。 次に、結果を Base64 としてエンコードします。 また、アクセス キーを Base64 デコードする必要もあります。 次の形式を使用します (擬似コードとして表示されます)。
Signature=Base64(HMAC-SHA256(UTF8(StringToSign), Base64.decode(<your_access_key>)))
要求に次のヘッダーを追加します。
x-ms-date: <Timestamp> x-ms-content-sha256: <ContentHash> host: <URIPathAndQuery> Authorization: "HMAC-SHA256 SignedHeaders=x-ms-date;host;x-ms-content-sha256&Signature=<Signature>"
要求を受け取ると、サービスは署名とタイムスタンプを検証して、リプレイ攻撃を含む特定のセキュリティ攻撃から保護します。 さまざまなプログラミング言語で HTTP 要求に署名する方法については、HMAC ヘッダー署名のチュートリアルを参照してください。
Azure RBAC 認証
Azure プラットフォームは、リソースへのアクセスを制御するためのロールベースのアクセス (Azure RBAC) を提供します。 Azure RBAC セキュリティ プリンシパルは、Azure リソースへのアクセスを要求しているユーザー、グループ、サービス プリンシパル、またはマネージド ID を表します。
Microsoft Entra 認証は、他の承認オプションよりも優れたセキュリティと使いやすさを提供します。 たとえば、マネージド ID を使用すると、アクセス キー認証と同様に、アカウント アクセス キーをコード内に格納する必要がなくなります。 通信サービス アプリケーションでは引き続きアクセス キー認証を使用できますが、可能であれば Microsoft Entra ID に移行することをお勧めします。
Azure RBAC には多くの組み込みロールが含まれており、さまざまなスコープで割り当てることができ、独自のカスタム ロールを作成できます。 これには、100 を超える組み込みロールが含まれています。 Azure には、所有者、共同作成者、閲覧者、ロールベースのアクセス制御管理者、ユーザー アクセス管理者の 5 つの基本的な Azure ロールがあります。 これらのロールの詳細については、ロールベースのアクセス制御のチュートリアルを参照してください。
Azure Communication Services (ACS) でサポートされるアクセス許可
ACS には、さまざまなリソースへの制御されたアクセスを許可する特定のアクセス許可 (acs.read と acs.write) が用意されています。
- acs.read アクセス許可: データを取得または表示する権限を付与します。
- acs.write アクセス許可: 同じリソースの種類内でのデータの変更または作成を許可します。
さらに、ACS は電子メール関連のアクセス許可をサポートしています。
- acs.email.read: 電子メール関連のサービス データの読み取りまたはアクセスを有効にします。
- acs.email.write: 電子メール関連のサービス データを変更または作成できます。
これらのアクセス許可は、ACS リソースに対するきめ細かなアクセス制御とセキュリティを確保するために重要です。
追加の RBAC トークンの取得
ACS のトークンを取得するには、MSAL (Microsoft Authentication Library) を使用できます。 ステップ バイ ステップ ガイドを次に示します。
- Azure AD にアプリケーションを登録する: アプリが Azure AD に登録されていることを確認します。
- MSAL のインストール: プラットフォーム用の MSAL ライブラリをインストールします (例: .NET の
Microsoft.Identity.Client
)。 - MSAL の構成: アプリケーションのクライアント ID、テナント ID、クライアント シークレットを使用して MSAL を設定します。
- トークンの取得: MSAL を使用して、必要なスコープ (
https://communication.azure.com/.default
) のトークンを取得します。
詳細な手順とコード例については、
ACS アクセス トークンを発行する HTTP 要求の例
依頼:
POST https://my-resource.communication.azure.com/identities/{identity}/:issueAccessToken?api-version=2023-10-01
Authorization: Bearer <your-access-token>
Content-Type: application/json
{
"scopes": [
"chat",
"voip"
]
}
応答:
{
"token": "token",
"expiresOn": "2023-10-10T21:39:39.3244584+00:00"
}
Azure RBAC に関する役立つリンク
- Azure ロールを割り当てる手順を示します。
- Azure portalを使用して Azure ロールの割り当てを一覧表示します。
- 条件を使用して Azure ロールの割り当て管理を他のユーザーに委任します。
- Azure カスタム ロールを
します。
ユーザー アクセス トークン認証
ユーザー アクセス トークンを使用すると、クライアント アプリケーションを特定のユーザーまたは ID として Azure Communication Services に対して直接認証できます。
ユーザー アクセス トークンの生成/取得
ユーザー アクセス トークンは、信頼できる環境内で生成されます。 Azure Communication Services Identity SDK を使用して生成するのが最も簡単な方法です。 詳細については、ユーザー アクセス トークンの作成と管理に関する
要求でのユーザー アクセス トークンの使用
適切なユーザー アクセス トークンを取得したら、それを Azure Communication Services の REST API への要求に含めることができます。 そのためには、Bearer HTTP 認証スキーム Authorization: Bearer <token>
を使用して、Authorization
ヘッダー内で指定する必要があります。
関連項目
Azure Communication Services 認証の詳細については、次の項目も確認できます。
- HTTP 要求に署名します。
- 概念認証のドキュメント - SDK を使用して REST API に対して認証する方法について説明します。
- ユーザー アクセス トークン サービスの構築 - Azure Communication Services チュートリアル。Azure Functions を使用してユーザー アクセス トークンを生成する信頼された認証サービスを作成する方法について説明します。