身分識別模型
Azure 通訊服務是與身分識別無關的服務,可提供多個優點:
- 從身分識別管理系統重複使用現有的身分識別,並使用 Azure 通訊服務 身分識別加以對應。
- 與任何現有的身分識別系統搭配運作良好,且與特定識別提供者沒有任何相依性。
- 保留用戶的數據,例如其名稱,私人,因為您不需要在 Azure 通訊服務 中複製它。
Azure 通訊服務身分識別模型搭配兩個主要概念運作。
使用者身分識別 / 對應
當您透過 SDK 或 REST API 建立使用者身分識別時,Azure 通訊服務 建立唯一的使用者識別碼。 無法直接在 Azure 通訊服務 中使用外部標識碼,例如電話號碼、使用者/裝置/應用程式識別碼或用戶名稱。 相反地,您必須使用通訊服務身分識別,並視需要維護與您自己的使用者標識碼系統的對應。 建立 Azure 通訊服務使用者身分識別是免費的,而且只有在用戶取用聊天或通話等通訊方式時,才會產生費用。 您如何使用產生的通訊服務身分識別,取決於您的案例。 例如,您可以對應身分識別 1:1、1:N、N:1 或 N:N,而且您可以將其用於人類使用者或應用程式。 使用者可以使用多個裝置同時參與多個通訊工作階段。 管理 Azure 通訊服務 使用者身分識別與您自己的身分識別系統之間的對應是您作為開發人員的責任,而且不會內建。 例如,您可以在現有的用戶數據表中新增數據CommunicationServicesId
行,以儲存相關聯的 Azure 通訊服務 身分識別。 在用戶端伺服器架構下會更詳細地描述對應設計。
存取權杖
建立使用者身分識別之後,用戶接著需要具有特定範圍的存取令牌,才能使用聊天或通話參與通訊。 例如,只有具有範圍令牌 chat
的使用者可以參與聊天,且具有 voip
範圍令牌的使用者可以參與 VoIP 通話。 使用者可以同時擁有多個權杖。 Azure 通訊服務 支援多個令牌範圍,以考慮需要完整存取權與有限存取權的使用者。 存取權杖具有下列屬性。
屬性 | 說明 |
---|---|
主體 | 令牌所代表的使用者身分識別。 |
到期 | 存取令牌至少 1 小時且最多 24 小時有效。 到期后,存取令牌無效,無法用來存取服務。 若要建立具有自定義到期時間的令牌,請在分鐘 (>=60, <1440) 中指定所需的有效性。 根據預設,令牌的有效時間為24小時。 我們建議針對一次性會議使用簡短的存留期令牌,併為使用應用程式較長時間的使用者使用較長的存留期令牌。 |
範圍 | 範圍會定義可以使用令牌來存取哪些通訊基本類型 (Chat/VoIP)。 |
存取權杖是 JSON Web 權杖 (JWT),且具有完整性保護。 也就是說,由於令牌簽章不再相符,因此無法變更其宣告,而不會使存取令牌失效。 如果通訊基本類型與無效的令牌搭配使用,則會拒絕存取。 雖然令牌未加密或模糊化,但您的應用程式不應該相依於令牌格式或其宣告。 令牌格式可以變更,且不屬於官方 API 合約的一部分。 Azure 通訊服務支援下列存取權杖範圍。
聊天權杖範圍
支援三個不同的聊天令牌範圍。 下表說明每個範圍的許可權。
chat
chat.join
chat.join.limited
功能 / 權杖範圍 | 聊天 | chat.join | chat.join.limited |
---|---|---|---|
建立聊天對話串 | 是 | N | N |
使用識別碼更新聊天對話 | 是 | N | N |
使用識別碼刪除聊天對話 | 是 | N | N |
將參與者新增至聊天對話 | Y | Y | 否 |
從聊天對話中移除參與者 | Y | Y | 否 |
取得聊天對話 | Y | Y | Y |
使用識別碼取得聊天對話 | Y | Y | Y |
取得 ReadReceipt | Y | Y | Y |
建立 ReadReceipt | Y | Y | Y |
使用識別碼建立聊天對話的訊息 | Y | Y | Y |
使用訊息識別碼取得訊息 | Y | Y | Y |
使用訊息識別碼更新您自己的訊息 | Y | Y | Y |
使用訊息識別碼刪除您自己的訊息 | Y | Y | Y |
傳送輸入指標 | Y | Y | Y |
取得對話識別碼的參與者 | Y | Y | Y |
VoIP 權杖範圍
支援兩個 VoIP 令牌範圍。 下表說明每個範圍的許可權。
voip
voip.join
功能 / 權杖範圍 | voip | voip.join |
---|---|---|
啟動 VoIP 通話 | 是 | 否 |
當使用者已受邀加入會議室時,在 Virtual Rooms 中啟動 VoIP 通話 | Y | Y |
加入 InProgress VoIP 通話 | Y | Y |
當使用者已受邀加入會議室時,在 Virtual Rooms 中加入 InProgress VoIP 通話 | Y | Y |
所有其他通話內作業,例如靜音/取消靜音、螢幕共用等。 | Y | Y |
虛擬會議室中所有其他通話作業,例如靜音/取消靜音、屏幕共用等 | 由使用者角色決定 | 由使用者角色決定 |
您可以搭配會議室使用voip.join
範圍來建立排程通話,其中只有受邀的使用者可以存取,以及禁止使用者建立任何其他通話的位置。
撤銷或更新存取權杖
- Azure 通訊服務身分識別程式庫可用於在到期時間之前撤銷存取權杖。 權杖撤銷不是立即完成。 可能需要長達 15 分鐘來傳播。
- 刪除身分識別、資源或訂用帳戶會撤銷所有存取令牌。
- 如果您想要移除使用者存取特定功能的能力,請撤銷使用者的所有存取令牌。 然後,發出範圍更有限的新存取權杖。
- 輪替存取金鑰會撤銷使用先前存取金鑰所建立的所有作用中存取權杖。 因此,所有身分識別都會失去 Azure 通訊服務的存取權,而且需要新的存取令牌。
用戶端伺服器架構
您應該透過受信任的服務建立和管理使用者存取令牌,而不是在用戶端應用程式中建立令牌。 建立使用者存取令牌所需的 連接字串 或Microsoft Entra 認證必須受到保護,傳遞至用戶端可能會洩漏秘密。 當令牌免費分配並被其他人誤用時,無法正確管理存取令牌可能會導致資源的額外費用。
如果您快取存取令牌至備份存放區,建議您加密令牌。 存取令牌會提供敏感數據的存取權,而且若未受到保護,則可以用於惡意活動。 具有使用者存取令牌的任何人都可以存取該使用者的聊天數據,或參與模擬使用者的通話。
請務必只在用戶端應用程式所需的令牌中包含這些範圍,才能遵循最低許可權的安全性原則。
- 使用者啟動用戶端應用程式。
- 用戶端應用程式聯絡您的身分管理服務。
- 身分識別管理服務會驗證應用程式使用者。 您可以略過使用者的匿名案例驗證,但請小心,然後將其他保護措施,例如節流和 CORS 新增至您的服務,以減輕令牌濫用。
- 建立或尋找用戶的通訊服務身分識別。
- 穩定的身分識別案例: 您的身分識別管理服務會維護應用程式身分識別與通訊服務身分識別之間的對應。 (應用程式身分識別包括您的使用者和其他可尋址的物件,例如服務或 Bot。如果應用程式身分識別是新的,則會建立新的通訊身分識別,並儲存對應。
- 暫時身分識別案例: 身分識別管理服務會建立新的通訊身分識別。 在此案例中,相同的用戶最後會針對每個會話使用不同的通訊身分識別。
- 身分識別管理服務會針對適用的身分識別發出使用者存取令牌,並將它傳回用戶端應用程式。
Azure 應用程式服務或 Azure Functions 是操作身分識別管理服務的兩種替代方案。 這些服務可以輕鬆擴展,並具有用於驗證使用者身份的內建功能。 它們已與 OpenID 和第三方身分提供者整合,例如 Facebook。
下一步
- 若要瞭解如何發行令牌,請參閱 建立和管理存取令牌。
- 如需驗證的簡介,請參閱向 Azure 通訊服務驗證。
- 若要閱讀數據落地和隱私權的相關信息,請參閱 區域可用性和數據落地。
- 若要瞭解如何快速建立身分識別和令牌進行測試,請參閱 快速建立身分識別快速入門。
- 如需簡單身分識別管理服務的完整範例,請流覽 受信任的服務教學課程。
- 如需與 Entra ID 和 Microsoft Graph 整合的更進階身分識別管理範例,請前往 驗證服務主圖範例。