【问题标题】:Basic authentication on node.js using curl使用 curl 对 node.js 进行基本身份验证
【发布时间】:2015-02-24 12:07:19
【问题描述】:

我正在开发一个应用程序,作为身份验证方法,我使用的是基本身份验证。到目前为止,一切正常,但显然我仍然做错了,正如新合作伙伴所指出的那样。

特别是以下形式的命令:

curl -v -H 'Authorization: Basic test:test' -H 'APP_KEY: AN-APP-KEY' -H 'APP_SECRET: XyZ' http://localhost:3000/auth

成功了,我在服务器上收到的headers是这样的:

{
"user-agent": "curl/7.37.1",
"host": "localhost:3000",
"accept": "*/*",
"authorization": "Basic test:test",
"app_key": "AN-APP-KEY",
"app_secret": "XyZ"
}

另一方面,命令形式:

curl -v --user 'test:test' -H 'APP_KEY: AN-APP-KEY' -H 'APP_SECRET: XyZ' http://localhost:3000/auth

没有成功。实际上我可以在服务器端看到的标题是这样的:

{
"authorization": "Basic dGVzdF9hdXRoOnRlc3Q=",
"user-agent": "curl/7.37.1",
"host": "localhost:3000",
"accept": "*/*",
"app_key": "AN-APP-KEY",
"app_secret": "XyZ"
}

所以,问题是:您知道为什么会发生这种情况以及如何在服务器端解决它吗?第二个 curl 命令应该不同吗?为什么?

期待您的帮助。

【问题讨论】:

    标签: node.js curl basic-authentication


    【解决方案1】:

    您的第一个示例,即您声称有效的示例,实际上并不是 http 基本身份验证的实现。您正在传递 Authentication: 标头,但它不符合标准。身份验证标头应包含单词 Basic 后跟 base64 编码格式的凭据。这就是您在示例 2 中看到的内容(如果解码 base64,您会得到“test_auth:test”)。

    所以为了支持基本身份验证,第二个是你需要处理的。 要在您的服务器中处理此问题,请使用basic-auth 等现有模块之一,让它为您解码您的凭据。

    【讨论】:

    • 谢谢。如果您知道,我可以再问您一个问题:我们为什么要转换为 base64?
    • 只允许密码中的字符,否则标题中不允许出现的字符。
    猜你喜欢
    • 2014-05-24
    • 2015-08-12
    • 2017-06-13
    • 2013-05-30
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多