【问题标题】:HTTP Basic Authentication not working in safari browser using node.js?HTTP 基本身份验证在使用 node.js 的 Safari 浏览器中不起作用?
【发布时间】:2019-06-08 03:34:44
【问题描述】:

我目前正在使用node.js进行开发。我使用以下格式进行http基本身份验证:

https://{用户名}:{密码}@{主机}

目前,上述模式也适用于 google chrome 和 mozilla firefox,但不适用于 safari 浏览器。但是,我也在一些论坛上读到,谷歌也会弃用这种基本身份验证方法。所以,问题是我们不能告诉用户在任何浏览器中关闭他们的安全选项,所以在这种情况下,我如何遵循与我们的应用程序无关的其他 web url 的确切模式或其他 web url 的 http 基本身份验证但它是我们的团队也为其他应用创建。

实际上,当我们访问受保护的网站时,它会弹出询问用户名和密码的窗口,如下面的截图链接所示。但我希望通过身份验证而不使用任何类型的代码显示弹出窗口。请帮助解决这个问题。

如果您无法理解问题陈述,请指导我更正有关问题的说明。

我在 Safari 浏览器上收到的屏幕截图中附上了我的问题场景。Basic Auth on Safari

我需要适合所有浏览器的可行且安全的解决方案。提前致谢。

【问题讨论】:

  • 这里没有人面临这样的问题吗??
  • 为什么不直接通过req.body进行认证呢?我应该写一个答案你是怎么做的?
  • 首先感谢@LukasGermerott。是的,当然,我也可以遵循不同的解决方案,如果您有不同的想法,请执行。

标签: node.js http express safari basic-authentication


【解决方案1】:

您也可以只使用 fetch 对其他 api 进行身份验证。

app.get("/sample", (req, res) => {
  console.log("enter into sample api");

  const username = "sample_uname",
    password = "sample_password";
    fetch('https://example.com/?username='+username+'&password='+password)
    .then(response=> {
        return response.json();
    })
    .then(json => {
        //Do what you want
        console.log(JSON.stringify(json));
    });
});

编辑:通过 GET 进行身份验证不是最安全的方法,因为密码会在 url 中闪现。所以也许你应该使用 POST

【讨论】:

  • 您的代码是关于我们从应用程序端执行的简单身份验证。但我的问题是我们如何通过给定的用户名和密码来验证其他域的 api。实际上,当我们访问受保护的网站时,它会显示一个弹出窗口并询问用户名和密码。但我们必须使用我们的代码通过该身份验证。
  • 您可以使用fetch() 并向其他API 发出GET 请求。你想要我编辑我的答案吗?编辑:好的,根据您的编辑,我认为这行不通
  • 是的,请根据 fetch() 函数编辑您的答案。
  • 就我而言,查询字符串中未收到网站用户名或密码。所以,我附上了截图供您在我的问题中参考。
  • 所以您的第二个 api 没有通过查询字符串接收凭据?或者您不想将其作为查询字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2014-01-22
  • 2014-12-31
  • 2011-11-12
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
相关资源
最近更新 更多