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

如何在Power Automate中实现Hawk身份认证?

在Power Automate中实现Hawk认证方案

完全可以在Power Automate中实现Hawk认证,你的核心思路是对的,以下是验证后的可行方案、细节修正和完整步骤:

关键参数确认与修正

1. Nonce生成(无需依赖外部网站)

不用调用第三方工具,直接用Power Automate内置函数生成6位字母数字Nonce,避免外部依赖更可靠:

substring(replace(replace(base64ToString(randBinary(6)), '/', ''), '+', ''), 0, 6)

解释:生成6字节随机二进制→转Base64→移除特殊字符/和+→截取前6位,保证结果是纯字母数字。

2. Timestamp生成(你的表达式正确)

当前的时间戳表达式完全符合Hawk要求(Unix时间戳,秒级):

div(sub(ticks(utcNow()), ticks('1970-01-01T00:00:00Z')), 10000000)

核心实现步骤

Hawk认证的核心是构造规范化请求字符串并生成HMAC-SHA256签名,以下是分步实现:

步骤1:初始化变量

先定义基础变量(根据你的实际接口调整):

  • hawkAppId:你的平台APP ID(字符串类型)
  • hawkKey:你的平台密钥(字符串类型)
  • method:请求方法(如GET/POST,大写)
  • resource:接口路径(含查询参数,如/api/v1/data?type=test)
  • host:接口主机名(小写,如api.example.com)
  • port:接口端口(HTTPS填443,HTTP填80)

步骤2:生成Timestamp和Nonce

用你已有的表达式生成timestamp变量,用上面的Nonce表达式生成nonce变量。

步骤3:构造规范化请求字符串

按照Hawk v1规范,拼接必须严格遵循格式(包括换行符):

concat(
    'hawk.1.header', decodeUriComponent('%0A'),
    variables('timestamp'), decodeUriComponent('%0A'),
    variables('nonce'), decodeUriComponent('%0A'),
    variables('method'), decodeUriComponent('%0A'),
    variables('resource'), decodeUriComponent('%0A'),
    variables('host'), decodeUriComponent('%0A'),
    variables('port'), decodeUriComponent('%0A'),
    '', decodeUriComponent('%0A'), // 空hash字段
    '', decodeUriComponent('%0A')  // 空ext字段
)

将结果保存到normalizedString变量。

步骤4:生成HMAC签名

使用Power Automate的hmacSHA256二进制函数生成签名,再转Base64:

base64(hmacSHA256(stringToBinary(variables('normalizedString')), stringToBinary(variables('hawkKey'))))

将结果保存到macValue变量。

步骤5:构造Authorization请求头

拼接成Hawk规范的认证头格式:

concat(
    'Hawk id="', variables('hawkAppId'), '", ts="', variables('timestamp'), '", nonce="', variables('nonce'), '", mac="', variables('macValue'), '"'
)

步骤6:发送API请求

在Power Automate的HTTP动作中,添加Authorization请求头,值为上面构造的字符串,即可发起带Hawk认证的请求。

调试与注意事项

  1. 签名一致性验证:先手动用在线HMAC工具计算签名(输入规范化字符串、密钥、SHA256),和Power Automate生成的macValue对比,确保一致。
  2. 时间同步:Hawk对时间戳容忍度一般为±5分钟,确保Power Automate的utcNow()与对方服务器时间差在范围内,否则会认证失败。
  3. 参数大小写:请求方法必须大写,主机名必须小写,资源路径要和实际请求完全一致(包括查询参数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:04:53