0

亲爱的stackoverflower,

我打算用 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 示例,因此他们将其添加到他们的路线图中。

4

1 回答 1

1

这很可能是由以下原因之一引起的:

  1. 您没有'http://127.0.0.1:3000/profile'在应用程序设置中列为有效的重定向 API。
  2. 您正在重用已交换令牌的授权代码。
  3. 本页的这一部分:

OAuth2 重定向 URI

为了增加安全性,所有redirect_uris 都必须使用SSL(即以https:// 开头)。没有 SSL 的 URI 只能用于开发和测试,在生产中不支持。

联系 api@coinbase.com 来解决这个问题。

于 2016-08-31T01:13:56.873 回答