You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel集成Azure Communication Services邮件遇401授权错误求助

解决Laravel集成Azure Communication Services邮件的401 Unauthorized问题

1. 核对访问密钥的正确性与权限

  • 登录Azure门户,进入你的Communication Services资源,左侧菜单点击「密钥」,确认你在.env中配置的是Primary Key或Secondary Key,不要截取连接字符串的其他部分。
  • 检查.env配置无多余空格,格式如下:
    AZURE_COMMUNICATION_ENDPOINT=https://<你的资源名称>.communication.azure.com/
    AZURE_COMMUNICATION_ACCESS_KEY=<你的主密钥或副密钥>
    
  • 默认访问密钥自带CommunicationServices.Mail.Send权限,若使用自定义RBAC角色,需确认角色包含该权限。

2. 修正API请求的授权头生成逻辑

Azure邮件API要求用HMAC-SHA256签名做授权,不能直接把密钥放在Authorization头里。在你的AzureEmailService类中添加签名生成方法:

private function generateAuthHeader(string $accessKey, string $method, string $path, string $date)
{
    $stringToSign = strtolower($method) . "\n" . $path . "\n" . $date . "\n";
    $signature = base64_encode(hash_hmac('sha256', $stringToSign, base64_decode($accessKey), true));
    return "HMAC-SHA256 SignedHeaders=date;host&Signature=" . $signature;
}

调用API时必须携带三个关键请求头:

// 在发送邮件的方法中
$endpoint = config('services.azure_communication.endpoint');
$accessKey = config('services.azure_communication.access_key');
$method = 'POST';
$path = '/emails:send?api-version=2023-03-31';
$date = gmdate('D, d M Y H:i:s \G\M\T');
$host = parse_url($endpoint, PHP_URL_HOST);

$authHeader = $this->generateAuthHeader($accessKey, $method, $path, $date);

$client = new \GuzzleHttp\Client();
$response = $client->post($endpoint . $path, [
    'headers' => [
        'Date' => $date,
        'Host' => $host,
        'Authorization' => $authHeader,
        'Content-Type' => 'application/json',
    ],
    'json' => [
        'senderAddress' => 'no-reply@你的验证域名.com',
        'content' => ['subject' => '测试邮件', 'plainText' => 'Hello'],
        'recipients' => ['to' => [['address' => '收件人邮箱']]]
    ],
]);

3. 检查资源提供商注册状态

  • 进入Azure门户→订阅→选中你的订阅→左侧菜单「资源提供商」,找到Microsoft.Communication,确保状态为「已注册」。若未注册,点击「注册」等待完成。

4. 确认资源的IAM权限

  • 进入Communication Services资源→左侧菜单「访问控制(IAM)」,检查当前操作账号/服务主体是否拥有参与者或邮件发送者角色,若无则添加对应角色分配。

关于令牌的说明

Azure邮件API不需要提前创建OAuth令牌,授权仅依赖上述HMAC签名,无需额外生成令牌步骤。


内容的提问来源于stack exchange,提问作者Miguel Oyarzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:05:04