【问题标题】:How to encrypt username/password for session如何加密会话的用户名/密码
【发布时间】:2019-11-27 08:43:07
【问题描述】:

我正在通过 https 调用第 3 方服务(使用 HttpWebRequest 并发送用户名、密码以返回 token,然后需要该令牌来进行未来的数据请求) .该服务只需要在公共 ASPNet 网站上列出项目。

将不涉及数据库,因此会话或 cookie 将存储令牌。

为了获取令牌,我发送了一个包含用户名/密码的 POST 请求,但我可以在 Fiddler 中看到这些详细信息(用户名/密码)(我认为是标题文本选项卡,但可以确认是否有人询问)——我个人认为我应该不是吗?当我发出 GET 请求以获取项目时,我发送令牌并且一切正常。

那么我应该在检索令牌之前以某种方式加密用户名/密码吗?如果是,我会怎么做?

我只是觉得任何人都可以检查 POST 请求,看看发生了什么。我可能是错的,但很乐意测试任何理论。

编辑 1

这是我发送 POST 请求的代码。请注意用户名和密码以及 https 的 URL

    private string UsernamePassword()
    {
        string un = new JavaScriptSerializer().Serialize(new
        {
            User = "abc",
            Password = "123"
        });

        return un;
    }

        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("https://site.data.com");

        wr.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br");
        wr.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-GB,en-US;q=0.9,en;q=0.8");
        wr.Headers.Add("Sec-Fetch-Site", "same-origin");
        wr.Headers.Add("Sec-Fetch-Mode", "cors");

        wr.Accept = "application/json";
        wr.ContentType = "application/json";

        byte[] data = null;

        wr.Method = "POST";
        data = Encoding.UTF8.GetBytes(UsernamePassword());
        wr.ContentLength = data.Length;
        wr.KeepAlive = true;          
        wr.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

        try
        {
            using (Stream stream = wr.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
                stream.Flush();
                stream.Close();
            }

            using (HttpWebResponse httpResponse = (HttpWebResponse)wr.GetResponse())
            {
                var encoding = Encoding.GetEncoding(httpResponse.CharacterSet);

【问题讨论】:

  • 这就是 TLS/https 的用途。
  • 尝试了解哪些地方需要使用 GET,哪些地方需要使用 POST。这样做你就会得到这个问题的答案。
  • @germi 所以你的意思是我只是添加一些代码来通过 TLS 传输用户名/密码?
  • @ajay Kumar - 请重新阅读问题,我已经明确说明我在哪里发帖/获取请求
  • @Computer HTTPS 现在应该是默认设置 - 如果您通过 HTTP 以明文方式传输凭据,那么您做错了。 TLS 负责加密数据 - 这就是它的用途,所以应该使用它。

标签: c# asp.net json httpwebrequest


【解决方案1】:

@germi 是对的。这正是 TLS/Https 的用途。 您可以看到您的https请求的内容这一事实并不意味着任何人都可以。

只要您的端点使用https(而不是http),交换将通过加密通道进行。如果您想验证,请安装Wireshark 并亲自查看。

【讨论】:

  • 谢谢!我已经修改了我的原始帖子以包含我发送的代码。它确实将 URL 设置为 https,但我还需要添加什么吗?
  • @Computer 不要在代码中存储用户名密码。虽然您没有访问数据库,但它与这篇文章中的问题相同:stackoverflow.com/questions/11685206/… 请查看那里的答案以获取有关如何处理该问题的更多信息。
  • 我很快就会研究那篇文章。密码来自 Web.config(但未加密),因此我使用 ConfigurationManager 获取值并将其传递给 UsernamePassword 代码。
  • @Computer 不要那样做。该功能很少使用,也很少在生产中使用。您找到的文档页面说明这仅用于开发目的
  • @PanagiotisKanavos 您是否建议不要将其存储在未加密的配置文件中?如果是这样,我目前正在查看stackoverflow.com/questions/6291322/… 进行加密,这是从上面发布的文章中引出的
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 2017-05-18
  • 2016-09-25
  • 2012-11-02
  • 2022-06-13
  • 2014-07-06
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多