2015-02-24 65 views
1

我正在开发一个应用程序,并将其作为身份验证方法使用基本身份验证。到目前为止,一切工作都很顺利,但显然我仍然在做一些错误的事情,就像新的合作伙伴所表明的那样使用curl对node.js进行基本身份验证

特别地,命令的形式为:

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

成功,并且我接收服务器上的标头是这样的:

{ 
"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命令应该不同,为什么?

期待您的帮助。

回答

2

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

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

+0

谢谢。如果您知道:我们为什么要转换为base64,我可以再问一个问题吗? – MightyMouse 2015-02-24 22:34:35

+0

只是为了允许密码中的字符,否则将不允许在标题中。 – JHH 2015-02-25 02:25:33

相关问题