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

Shelly电力设备摘要认证二次请求仍返回401问题排查

.NET 6 Minimal API调用Shelly设备API,摘要认证二次请求仍返回401

我正在开发一个.NET 6 Minimal API应用,用来调用Shelly电力设备的API,采用摘要认证(遵循Shelly文档和RFC 7616规范)。

当前实现的核心流程:

  • 处理的请求URL为http:///rpc/Switch.GetStatus?id=0,已设置好Accept、User-Agent等常规请求头
  • 在HttpClient扩展方法中,先克隆HttpRequestMessage(保留内容、版本和头信息)
  • 首次调用SendAsync()得到带WWW-Authentication头的401响应,解析出realm、nonce、qop参数
  • 按规范完成SHA256哈希计算,生成的认证头字符串如下:
    Digest username="admin", realm="shellyplugus-083af2018b68", nonce="633e7ba8", cnonce=8724224, response="9B15CEBA6E5FD862271954AC2C40948D6237511B83748143FF763A0E76B1A346", algorithm=SHA-256
    
  • 通过以下代码将认证头添加到克隆的请求(digestRequest)中:
    var digestAuthHeaders = new DigestAuthHeader(
                "Digest", realm, username, password, nonce, qop, clientNonce, "SHA-256");
    var digestRequestHeader = digestAuthHeaders.DigestRequestHeader();
    digestRequest.Headers.Add("Authorization", digestRequestHeader);
    
  • 二次调用SendAsync(digestRequest, httpCompletionOption)后,依然返回401响应,无其他错误码

有两个疑问:

  • 是否应该放弃克隆请求,直接新建请求?
  • 当前实现是否存在明显错误?

注:Shelly仅要求认证字符串包含上述字段,无需uri、qop、opaque等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:50:17