C# 重新安装/API/HTTPS连接:在标头上添加密码-这安全吗?

C# 重新安装/API/HTTPS连接:在标头上添加密码-这安全吗?,c#,api,https,refit,C#,Api,Https,Refit,我正在设置一个新的WebAPI服务器(ASP NET),我们正在使用HTTPS并检查通过消息头传递的有效密码 var sugars = await nsAPI.GetMakeUps(); 在服务器端,我可以检查是否每个包都是通过HTTPS交付的,以及它是否包含正确的带有密码信息的头 var sugars = await nsAPI.GetMakeUps(); 我的问题是:我们在API客户机上使用refit,在每个包上插入密码作为头。客户端是否可以传递标头,或未加密的单个消息 var su

我正在设置一个新的WebAPI服务器(ASP NET),我们正在使用HTTPS并检查通过消息头传递的有效密码

var sugars = await nsAPI.GetMakeUps(); 
在服务器端,我可以检查是否每个包都是通过HTTPS交付的,以及它是否包含正确的带有密码信息的头

var sugars = await nsAPI.GetMakeUps(); 
我的问题是:我们在API客户机上使用refit,在每个包上插入密码作为头。客户端是否可以传递标头,或未加密的单个消息

var sugars = await nsAPI.GetMakeUps(); 
代码如下:

var sugars = await nsAPI.GetMakeUps(); 
连接和初始化

var httpClient = new HttpClient(new AuthenticatedHttpClientHandler())
{
    BaseAddress = new Uri("https://10.103.208.16:45456/")
}; 


var nsAPI = RestService.For<Interface1>(httpClient);
var sugars = await nsAPI.GetMakeUps(); 
插入密码的HttpHandler

var sugars = await nsAPI.GetMakeUps(); 
class AuthenticatedHttpClientHandler : HttpClientHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        request.Headers.Add("pw", "MY_SECRET_PW");
        return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
    }
}
类AuthenticatedHttpClientHandler:HttpClientHandler
{
受保护的覆盖异步任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
请求。标题。添加(“我的秘密”);
返回wait base.sendaync(请求,取消令牌).configurewait(false);
}
}
我是否有可能被嗅探到密码未加密? 我可以强制重新安装以仅通过HTTPS连接进行通信/发送包吗?

这只是我的:

var sugars = await nsAPI.GetMakeUps(); 
Refit使用标准的.NET
HttpClient
(您在示例中明确使用了一个),因此它就像您直接使用HttpClient一样安全

var sugars = await nsAPI.GetMakeUps(); 
在您的示例中,您将基址设置为HTTPS URI,这就是Refit用来发起请求的全部内容

var sugars = await nsAPI.GetMakeUps(); 
但是,如果服务器重定向到HTTP URI(这不太可能),并且
HttpClient
配置为自动跟踪重定向(这可能是默认设置),则后续请求可能重定向到此不安全的URL。如果是这种情况,您的处理程序将在不安全的请求中发送密码

var sugars = await nsAPI.GetMakeUps(); 
这是一种不太可能出现的情况,但是有一个简单的解决方案——在附加密码之前,只需检查URL的方案即可

var sugars = await nsAPI.GetMakeUps(); 
类AuthenticatedHttpClientHandler:HttpClientHandler
{
受保护的覆盖异步任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
if(string.Equals(request.RequestUri.Scheme,“https”,StringComparison.OrdinalIgnoreCase))
请求。标题。添加(“我的秘密”);
返回wait base.sendaync(请求,取消令牌).configurewait(false);
}
}
这样,如果您最终以某种方式发出了HTTP请求而不是HTTPS请求,那么您就不会发送密码了

var sugars = await nsAPI.GetMakeUps(); 
如果您担心您的密码在HTTPS请求中是否可嗅探,那么只有在运行客户端的计算机已被泄露并且信任不应被泄露的人时,才有可能。但是如果是这种情况,有更简单的方法获取密码,例如通过反编译DLL或读取配置文件

这只是我的:

var sugars = await nsAPI.GetMakeUps(); 
Refit使用标准的.NET
HttpClient
(您在示例中明确使用了一个),因此它就像您直接使用HttpClient一样安全

var sugars = await nsAPI.GetMakeUps(); 
在您的示例中,您将基址设置为HTTPS URI,这就是Refit用来发起请求的全部内容

var sugars = await nsAPI.GetMakeUps(); 
但是,如果服务器重定向到HTTP URI(这不太可能),并且
HttpClient
配置为自动跟踪重定向(这可能是默认设置),则后续请求可能重定向到此不安全的URL。如果是这种情况,您的处理程序将在不安全的请求中发送密码

var sugars = await nsAPI.GetMakeUps(); 
这是一种不太可能出现的情况,但是有一个简单的解决方案——在附加密码之前,只需检查URL的方案即可

var sugars = await nsAPI.GetMakeUps(); 
类AuthenticatedHttpClientHandler:HttpClientHandler
{
受保护的覆盖异步任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
if(string.Equals(request.RequestUri.Scheme,“https”,StringComparison.OrdinalIgnoreCase))
请求。标题。添加(“我的秘密”);
返回wait base.sendaync(请求,取消令牌).configurewait(false);
}
}
这样,如果您最终以某种方式发出了HTTP请求而不是HTTPS请求,那么您就不会发送密码了

var sugars = await nsAPI.GetMakeUps(); 
如果您担心您的密码在HTTPS请求中是否可嗅探,那么只有在运行客户端的计算机已被泄露并且信任不应被泄露的人时,才有可能。但是如果是这种情况,有更简单的方法获取密码,例如通过反编译DLL或读取配置文件

var sugars = await nsAPI.GetMakeUps();