Azure Logic Apps HTTP触发器:无需付费服务的认证方案咨询
实现Azure Logic App HTTP触发的无SSO认证方案(不依赖APIM/Front Door)
方案一:用户名/密码认证
可以直接在Logic App工作流内实现Basic Auth或自定义头的用户名密码验证,步骤如下:
- 要求客户端通过HTTPS发送请求,将认证信息放在请求头:
- 标准Basic Auth:使用
Authorization: Basic <base64编码的用户名:密码>格式 - 自定义头:比如
X-Username和X-Password(不推荐,不如Basic Auth规范)
- 标准Basic Auth:使用
- 在Logic App的HTTP触发器之后添加条件判断步骤:
- 解析认证信息:如果是Basic Auth,先提取
headers('Authorization'),用replace(headers('Authorization'), 'Basic ', '')去掉前缀,再用base64ToString()解码得到用户名:密码字符串,最后用split(解码后字符串, ':')拆分成用户名和密码两个值 - 对比验证:将拆分出的用户名、密码与预先存储的可信值(推荐存在Azure Key Vault中,用
Get Secret步骤获取)做精确匹配 - 分支处理:匹配成功则继续执行后续业务流程;匹配失败则用
Response步骤返回401 Unauthorized状态码及错误提示
- 解析认证信息:如果是Basic Auth,先提取
方案二:签名请求验证
通过HMAC哈希签名验证请求合法性,避免传输明文凭证,步骤如下:
- 约定客户端签名规则:
- 客户端使用共享密钥,对请求的关键内容(比如请求体、当前时间戳、随机Nonce)进行HMAC-SHA256哈希,生成Base64编码的签名
- 将时间戳、Nonce、签名放在请求头(比如
X-Timestamp、X-Nonce、X-Signature)
- Logic App内验证流程:
- 提取请求头中的
X-Timestamp、X-Nonce、X-Signature,以及请求体内容 - 验证时间戳有效性:计算当前时间与请求时间戳的差值,拒绝超出合理范围(比如5分钟)的请求,防止重放攻击
- 生成本地签名:使用相同的共享密钥(从Azure Key Vault获取),对相同的请求内容组合进行HMAC-SHA256哈希并Base64编码
- 签名对比:将本地生成的签名与请求头中的
X-Signature做精确匹配,匹配通过则继续流程,否则返回403 Forbidden
- 提取请求头中的
注意事项
- 所有敏感信息(密码、共享密钥)禁止硬编码在工作流中,必须通过Azure Key Vault的机密引用获取
- 强制使用HTTPS传输请求,避免认证信息或签名内容被窃听
- 签名验证中必须加入时间戳和Nonce验证,彻底防范重放攻击
内容的提问来源于stack exchange,提问作者InvalidSyntax
相关产品推荐
相关产品推荐

