亲爱的stackoverflowser,
我正在努力建立一个与Coinbase集成的Electron应用程序。
首先,我要使服务器(NodeJS)与OAuth2一起使用。
每件事情都很有效,但是当我想用指示的帖子请求将code
更改为access token
时,它会给我以下错误:
{
error: "invalid_request",
error_description: "The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed."
}
我已将https://localhost:3000/auth/coinbase/callback
和https://localhost:3000/profile
添加到有效的API URI中。
几个小时后我没有成功搞清楚。
我的服务器是:
var express = require('express');
var app = express();
var fs = require('fs')
var https = require('https');
var coinbase = require('coinbase')
var request = require('request');
var options = {
key: fs.readFileSync('./ssl/coinbase.dev.key'),
cert: fs.readFileSync('./ssl/coinbase.dev.crt'),
};
var client_id = 'gues it'
var client_secret = 'gues it'
app.use(express.static('static'));
app.get('/login/coinbase', function(req, res) {
res.redirect('https://www.coinbase.com/oauth/authorize?response_type=code&redirect_uri=https://localhost:3000/auth/coinbase/callback&client_id=' + client_id + '&scope=wallet:user:read,wallet:accounts:read')
})
app.get('/auth/coinbase/callback', function(req, res) {
var data = {
client_id: client_id,
client_secret: client_secret,
grant_type: 'authorization_code',
code: req.query.code,
redirect_uri: 'https://localhost:3000/profile'
}
request.post(
'https://api.coinbase.com/oauth/token', data, function (error, response, body) {
console.log(body)
res.send(body)
}
);
})
app.get('/', function(req, res) {
res.send('home')
})
app.get('/profile', function(req, res) {
res.send('profile')
})
var server = https.createServer(options, app);
server.listen(3000)
提前致谢,
西奥
[编辑] 我联系了Coinbase的开发人员,他们对使用Coinbase的OAuth上没有NodeJS示例感到惊讶,因此他们将其添加到他们的路线图中。
答案 0 :(得分:1)
这很可能是由以下原因引起的:
'http://127.0.0.1:3000/profile'
作为有效的重定向API。OAuth2重定向URI
为了增加安全性,所有redirect_uris都必须使用SSL(即以。开头) https://开头)。没有SSL的URI只能用于开发和 测试并不会在生产中得到支持。
请联系api@coinbase.com以解决问题。