如何获取Azure Web PubSub REST API认证用JWT Bearer令牌
Azure Web PubSub 服务端REST API鉴权实现方案
找不到对应AAD权限项不是配置疏漏,Azure Web PubSub数据平面API的鉴权逻辑和Microsoft Graph存在差异,目前没有把权限项放到应用注册的默认权限选择列表中,以下是两种可直接落地的实现方式:
方案1:Access Key签名生成令牌(推荐,POC/生产服务端调用均适用)
这是官方原生支持的服务端鉴权方式,不需要走AAD应用注册流程,配置步骤最少:
- 提取访问密钥:进入Azure门户中你的Web PubSub资源页,在「密钥」菜单下复制
Primary Key或Secondary Key备用,两个密钥效力一致,支持定期轮换。 - 生成合规JWT令牌:
令牌要求:- 签名算法使用
HS256,签名密钥为上一步复制的Access Key - Payload必须包含
aud声明,固定值为https://webpubsub.azure.com - 建议添加
exp声明设置过期时间,服务端场景设置15-60分钟有效期即可,降低令牌泄露风险
PHP侧可以直接使用通用JWT库生成,示例代码:
require 'vendor/autoload.php'; use Firebase\JWT\JWT; $webPubSubAccessKey = '从Azure门户复制的访问密钥'; $payload = [ 'aud' => 'https://webpubsub.azure.com', 'exp' => time() + 3600 // 1小时有效期 ]; $authToken = JWT::encode($payload, $webPubSubAccessKey, 'HS256'); - 签名算法使用
- 调用接口:发起REST请求时在请求头携带
Authorization: Bearer <生成的authToken>即可,以向指定群组发送消息为例,请求格式如下:POST /api/hubs/[你的Hub名称]/groups/[目标群组名]/:send?api-version=2023-07-01 Host: [你的Web PubSub资源名].webpubsub.azure.com Authorization: Bearer [生成的令牌] Content-Type: application/json {"content": "待发送的消息内容"}
方案2:AAD应用注册鉴权(适合统一AAD权限管控场景)
如果你需要沿用现有AAD鉴权体系,不需要在应用注册的API权限页搜索服务,直接通过IAM角色分配即可完成授权:
- 先完成常规应用注册,记录对应的客户端ID、租户ID、客户端密钥
- 进入Web PubSub资源的「访问控制(IAM)」菜单,选择添加角色分配,按需选择对应内置角色:
Web PubSub Service Publisher:仅拥有发送消息权限,满足你当前的发消息需求Web PubSub Service Owner:拥有所有数据平面API操作权限,可管理连接、群组、发送消息
角色分配的主体选择你之前注册的应用,保存后等待3-5分钟权限同步生效
- 获取AAD访问令牌时,将资源范围(v2.0端点为scope参数,v1.0端点为resource参数)设置为
https://webpubsub.azure.com/.default,拿到的令牌即可直接用于调用Web PubSub REST API。
选型建议:POC阶段优先选择方案1,无权限同步等待时间,配置成本最低;生产环境如果你的服务体系没有强依赖AAD统一鉴权,也优先选方案1,密钥可通过密钥保管库存储、定期轮换,安全性足够。如果你的全服务已经接入AAD做统一权限管控,再选择方案2即可。
内容的提问来源于stack exchange,提问作者HarisH Sharma
相关产品推荐
相关产品推荐

