【问题标题】:NPM Grant OAuth Middleware "invalid_redirect" errorNPM 授予 OAuth 中间件“invalid_redirect”错误
【发布时间】:2015-07-20 15:13:52
【问题描述】:

我一直在尝试使用这个elegant looking package 来通过 Jawbone API 进行身份验证。但我不断收到此错误 -

我已使用 Jawbone API 服务配置我的“应用程序”以使用这些重定向 URI -

我的配置文件是这样的 -

module.exports = {

    'server': {
        'protocol'  : 'https',
        'host'      : 'localhost',
        'port'      : 5000,
        'callback'  : '/done',
        'transport' : 'session',
        'state'     :  true
    },

    'jawbone' : {
       'key'        : '6f*********', 
       'secret'     : '9b************************',
       'callback'   : '/connect/jawbone/callback',
       'scope'      : ['basic_read', 'sleep_read'],
    }
}

我已经尝试按照authors examples 来生成这样的 app.js -

var config      = require('./config');
var express     = require('express');
var session     = require('express-session');
var Grant       = require('grant-express');
var grant       = new Grant(require('./config.js'));
var bodyParser  = require('body-parser') 
var app         = express()
var Purest      = require('purest');
var jawbone     = new Purest({provider:'jawbone'});
var https       = require('https');
var fs          = require('fs');

var logger = require('morgan')

    app.use(logger('dev'))
    app.use(bodyParser.urlencoded({extended:true}));
    app.use(session({secret:'grant'}));
    app.use(grant);

    app.get('/done', function (req, res) {
      console.log(req.query);
      res.end(JSON.stringify(req.query, null, 2));
    });

    /*
jawbone.get('users/@me', {
  auth:{bearer:'[ACCESS_TOKEN]'}
}, function (err, res, body) {
  // body is a parsed JSON object containing the response data
  console.log(body);
})
*/
var sslOptions = {
    key: fs.readFileSync('./.server.key'),
    cert: fs.readFileSync('./.server.crt')
    };
var secureServer = https.createServer(sslOptions, app).listen(config.server.port, function(){
    console.log('Listening on port ' + config.server.port);
});

我假设我犯了一个新手错误,并且可能误读了文档或示例。有人可以指出我的配置错误吗?

【问题讨论】:

  • host 的值应该是 localhost:5000 我知道这有点误导。
  • 哦,这有帮助。现在我收到“此网页有重定向循环”错误。我的路线做错了什么?我不能只是 res.send() 将结果发送到 /done 吗?
  • callback 键包含服务器上要接收结果的路径。 /connect/jawbone/callback 路由由 Grant 在内部使用,因此您不能使用该路由。此外,jawbone 提供程序的 callback 键会覆盖为 server 指定的全局 callback 键。只需像这样callback:'/handle_callback'jawbone 设置callback 键,您就会在/handle_callback 路由中获得结果(顺便说一句,所有这些都在文档中)。
  • 谢谢。我收到了“{}”,并认为这是一次失败的身份验证尝试。但我想这意味着成功。如果您想将此作为答案提交,我会接受。顺便说一句,这个模块做得很好。谢谢。
  • 发布了答案,希望对其他人也有帮助。

标签: node.js express oauth-2.0 jawbone grant-oauth


【解决方案1】:

如上面的 cmets 所述,您的配置应如下所示:

{

    'server': {
        'protocol'  : 'https',
        'host'      : 'localhost:5000',
        'transport' : 'session',
        'state'     :  true
    },

    'jawbone' : {
       'key'        : '6f*********', 
       'secret'     : '9b************************',
       'callback'   : '/handle_jawbone_callback',
       'scope'      : ['basic_read', 'sleep_read'],
    }
}

目前没有单独的port 选项,因此如果您的应用程序顶部没有某种虚拟主机,您应该将端口号附加到host 值 - host:'localhost:5000

对于callback 键,您应该始终在服务器上设置您希望从 OAuth 流接收结果的路径。您为 OAuth 应用程序的 redirect_uri 指定的 /connect/jawbone/callback 路由是为 Grant 保留的,因此您不能直接使用该路由。

例如,您可以这样设置最终路由:callback:'/handle_jawbone_callback'

所有这些都记录在模块的readme file 中。

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2017-07-28
    • 1970-01-01
    • 2014-06-10
    • 2021-07-06
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多