首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Shelly Power Product中使用Digest身份验证,无法从第二个get请求中获得200个代码

在Shelly Power Product中使用Digest身份验证,无法从第二个get请求中获得200个代码
EN

Stack Overflow用户
提问于 2022-10-06 07:53:32
回答 1查看 86关注 0票数 -1

我正在努力获得一些Shelly产品(这里的API文档),它可以从.NET 6最小API应用程序中调用。

继来自Shelly和RFC 7616的摘要身份验证文档之后,我为HttpClient提供了一个扩展方法,它基本上为URL HttpClient取了一个HttpRequestMessage设置正常标头后(接受、用户代理等)对于该HttpRequestMessage,它将该HttpRequestMessage作为参数传递给该扩展方法。

将HttpRequestMessage传递给扩展方法后,它将被克隆到一个新的HttpRequestMessage中,其中包含内容、版本和标题。然后,进行第一个SendAync()调用,生成包含WWW-身份验证头的401响应。在解析出领域、当前和qop之后,将根据规范执行多轮散列。Shelly使用SHA256而不是MD5 (应该如此),但总体上遵循哈希的标准。在此之后,将创建新形成的身份验证头字符串,并将其格式化为:

代码语言:javascript
复制
Digest username="admin", realm="shellyplugus-083af2018b68", nonce="633e7ba8", cnonce=8724224, response="9B15CEBA6E5FD862271954AC2C40948D6237511B83748143FF763A0E76B1A346", algorithm=SHA-256

下面的代码是创建一个AuthHeaderObject,上面的字符串的创建,并被添加到克隆的HttpRequestMessage中(这里称为"digestRequest“):

代码语言:javascript
复制
var digestAuthHeaders = new DigestAuthHeader(
            "Digest", realm, username, password, nonce, qop, clientNonce, "SHA-256");
var digestRequestHeader = digestAuthHeaders.DigestRequestHeader();
digestRequest.Headers.Add("Authorization", digestRequestHeader);

传递克隆请求和完成选项enum的第二个SendAsync()。

代码语言:javascript
复制
var authRes = await client.SendAsync(digestRequest, httpCompletionOption);

之后的问题是,我仍然得到401的答复。甚至没有得到另一个指示另一个问题的代码。这就像提出了同样的要求。

我应该放弃HttpRequestMessage的克隆,而仅仅创建一个新的克隆吗?有什么是不正确的吗?我想指出的是,Shelly只指定授权字符串只包含包含的值,它不需要uri、qop、不透明和其他一些值。

EN

回答 1

Stack Overflow用户

发布于 2022-10-06 09:08:16

看起来有一种直接的方法可以通过使用HttpClientHanlder和设置NetworkCredentials属性来实现这一点,然后将处理程序传递给HttpClient。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73970309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档