Node.js &引用;无效的\u请求。。。缺少授权类型“;当从NodeJs调用某些OAuth2而不是从具有完全相同头的curl调用时

Node.js &引用;无效的\u请求。。。缺少授权类型“;当从NodeJs调用某些OAuth2而不是从具有完全相同头的curl调用时,node.js,spring-security,oauth-2.0,node-rest-client,Node.js,Spring Security,Oauth 2.0,Node Rest Client,我非常困惑,为什么从NodeJs节点rest客户端调用它时,从springsecurityoauth2得到“missingsgranttype”错误 我通过“嗅探器”检查,我可以看到我发布的标题和正文完全相同。我注意到的唯一区别是“Content-Type:application/x-www-form-urlencoded”在从NodeJs调用时不是settup,但据我所知,node-rest客户端不允许这样做。我不认为这会产生影响,因为我可以看到“grant_type=password&use

我非常困惑,为什么从NodeJs节点rest客户端调用它时,从springsecurityoauth2得到“missingsgranttype”错误

我通过“嗅探器”检查,我可以看到我发布的标题和正文完全相同。我注意到的唯一区别是“Content-Type:application/x-www-form-urlencoded”在从NodeJs调用时不是settup,但据我所知,node-rest客户端不允许这样做。我不认为这会产生影响,因为我可以看到“grant_type=password&username=a&password=a”的格式与curl中的格式完全相同

据我所知,在curl中,“-u greencard trusted client:greencard secret”意味着我传递它的抛出头和“-d”grant_type=password&username=a&password=a”作为主体,因此,我理解我使用节点rest客户端的方式与下面使用curl的方式相同

如有任何建议,将不胜感激

直接卷曲至弹簧OAuth2维修

curl-u myapp可信客户端:myapp secret-k-d“grant_type=password&username=a&password=a”-H“内容类型:application/x-www-form-urlencoded”


我认为您应该在值
application/x-www-form-urlencoded
中添加标题
Content Type
。您是对的。刚刚修好了。请留下您的评论作为答案,然后我会选择它作为答案。我认为您应该在
应用程序/x-www-form-urlencoded
的值中添加标题
内容类型
。您是对的。刚刚修好了。留下你的评论作为答案,我会选择它作为答案
>sudo ngrep -Wbyline -d lo port 9080
interface: lo (127.0.0.0/255.0.0.0)
filter: (ip or ip6) and ( port 9080 )
####
T 127.0.0.1:38606 -> 127.0.0.1:9080 [AP]
POST /myclient/oauth/token HTTP/1.1.
Host: localhost:9080.
Authorization: Basic Z3JlZW5jYXJkLXRydXN0ZWQtY2xpZW50OmdyZWVuY2FyZC1zZWNyZXQ=.
User-Agent: curl/7.47.0.
Accept: */*.
Content-Type:application/x-www-form-urlencoded.
Content-Length: 41.
.
grant_type=password&username=a&password=a
##
T 127.0.0.1:9080 -> 127.0.0.1:38606 [AP]
HTTP/1.1 200 OK.
X-Powered-By: Servlet/3.1.
Cache-Control: no-store.
Pragma: no-cache.
Content-Type: application/xml;charset=UTF-8.
X-Content-Type-Options: nosniff.
X-XSS-Protection: 1; mode=block.
X-Frame-Options: DENY.
Content-Language: en-US.
Transfer-Encoding: chunked.
Date: Thu, 09 Mar 2017 20:10:54 GMT.
.
105.
<OAuth2AccessToken><access_token>78048b70-f84c-476c-ba4f-6eecca1c5f77</access_token><token_type>bearer</token_type><refresh_token>78410631-e3a3-4c75-b8f5-7373bbcd4fd1</refresh_token><expires_in>119</expires_in><scope>read write trust</scope></OAuth2AccessToken>.

##
T 127.0.0.1:9080 -> 127.0.0.1:38606 [AP]
ngrep -Wbyline -d lo port 9080
interface: lo (127.0.0.0/255.0.0.0)
filter: (ip or ip6) and ( port 9080 )
####
T 127.0.0.1:38750 -> 127.0.0.1:9080 [AP]
POST /myclient/oauth/token HTTP/1.1.
Authorization: Basic Z3JlZW5jYXJkLXRydXN0ZWQtY2xpZW50OmdyZWVuY2FyZC1zZWNyZXQ=.
Content-Length: 41.
Host: 127.0.0.1:9080.
Connection: close.
.
grant_type=password&username=a&password=a
##
T 127.0.0.1:9080 -> 127.0.0.1:38750 [AP]
HTTP/1.1 400 Bad Request.
X-Powered-By: Servlet/3.1.
Cache-Control: no-store.
Pragma: no-cache.
Content-Type: application/xml;charset=UTF-8.
X-Content-Type-Options: nosniff.
X-XSS-Protection: 1; mode=block.
X-Frame-Options: DENY.
Content-Language: en-US.
Transfer-Encoding: chunked.
Connection: Close.
Date: Thu, 09 Mar 2017 20:15:09 GMT.
.
7a.
<OAuth2Exception><error>invalid_request</error><error_description>Missing grant type</error_description></OAuth2Exception>.

##
T 127.0.0.1:9080 -> 127.0.0.1:38750 [AP]
0.
var express = require('express');
var bodyParser = require('body-parser');
var Client = require('node-rest-client').Client;

var client = new Client();

client.registerMethod("postMethod", "http://127.0.0.1:9080/myclient/oauth/token", "POST");

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

var port = process.env.PORT || 3000;

var router = express.Router();

var tokenRoute = router.route('/token');

tokenRoute.post(function (req, res) {

  var username = 'myapp-trusted-client';
  var password = 'myapp-secret';
  var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64');

  var args = {
    //data: req.body,
    data: 'grant_type=password&username=a&password=a',
    headers: {'Authorization': auth }
    //headers: { "Content-Type": "application/json" }
  };
  client.methods.postMethod(args, function (data, response) {

    res.writeHead(200, { "Content-Type": "application/json" });
    var json = JSON.stringify({
      tokenBackEnd: data
    });
    res.end(json);

  });

});

app.use('/myclient', router);

app.listen(port);