在C#中使用HttpClient进行基本身份验证,无需硬编码密码

在C#中使用HttpClient进行基本身份验证,无需硬编码密码,c#,.net-core,httpclient,basic-authentication,C#,.net Core,Httpclient,Basic Authentication,我正在使用System.Net.Http.HttpClient调用一个API,并且正在使用基本身份验证。客户端正在作为windows服务运行。 我正在寻找一种通过基本身份验证触发API的方法 我知道我可以用像这样的东西 var base64String=; client.DefaultRequestHeaders.Authorization=new System.Net.Http.Headers.AuthenticationHeaderValue(“基本”,EncodeBase64(GetByt

我正在使用System.Net.Http.HttpClient调用一个API,并且正在使用基本身份验证。客户端正在作为windows服务运行。 我正在寻找一种通过基本身份验证触发API的方法

我知道我可以用像这样的东西

var base64String=;
client.DefaultRequestHeaders.Authorization=new System.Net.Http.Headers.AuthenticationHeaderValue(“基本”,EncodeBase64(GetBytes(“用户名:密码”))

我不想输入用户名和密码或base 64编码的凭据。是否可以获取当前用户的凭据,以便在应用程序中(配置文件或代码中)不维护凭据


我不想在应用程序中维护凭据,因为在设置过程中编辑配置文件(或维护凭据的位置)并添加凭据是一个繁琐的过程,此外,在配置文件中使用凭据是不安全的,因为它是人类可读的。

我建议您不要硬编码这些凭据,最好从数据库等安全散列的地方获取它们。如果您只是不想输入用户名和密码或base64编码的等价值,那么我建议您除了基本身份验证之外,还考虑其他选项


其他选项可以是windows身份验证、azure,甚至客户端证书。

这就是基本身份验证的含义-像这样传递用户名/密码。没有什么强迫您硬编码这些值,它们可以来自配置文件或配置文件设置,但最终,您必须发送它们。如果您不想这样做,请不要使用基本身份验证
是否可以获取当前用户的凭据
这就是windows/domain身份验证的方式works@PanagiotisKanavos我同意你的看法。但我正试图找到如何使用HttpClient实现这一点。谢谢您的输入。您已经在问题中编写了相关代码。您是否询问如何从配置加载设置?您甚至可以从本地文件加载它们。你看过.NETCore的配置类吗?这不会改变答案-基本身份验证不是这样工作的。如果不希望存储凭据,请询问用户。如果不想询问用户,请存储凭据。顺便说一下,您可以安全地存储它们,.NET核心文档展示了如何做到这一点。配置设置不必存储在文件中,即使是这样,也不必进行加密。此外,您是否打算使用最终用户凭据调用API?这意味着API已经有权访问所有用户的密码?我正在使用一个API,它不在我的控制范围内。我无法更改身份验证方法。@但您可以控制凭据的存储位置。坦率地说,这个问题还不清楚。没有任何内容会强制您硬编码凭据。我不想在配置文件中添加凭据,因为它是人类可读的,这可能会损害密码。配置凭据也会增加设置过程的开销。有人否决了我的问题。无法更改auth方法本身就是一个讨论。您同意您不想在configs中的某个地方硬编码凭据,这是很好的。但就像Panagiotis提到的,您可以控制它们的存储位置。这些证书来自哪里?如果您有多个用户,那么为什么他们应该在配置中?为什么不把它们放在一个数据库中,在那里它们可以被散列,而不是人类可读的。在需要这些凭据的代码中,您可以根据用户会话从数据库调用凭据,现在它们不再硬编码。