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
相关产品推荐
相关产品推荐

