【发布时间】: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