0

请求的验证与请求的要求之间似乎存在冲突。API 调用要求将范围设置为“app”。它还需要一个用户 ID。但是,当两者结合时,您会收到以下消息,表明您无法将两者结合起来。

API https://docs.smooch.io/rest/#pre-create-app-user

要求

{ host: 'api.smooch.io',
  path: '/v1/appusers',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${token}`
}

示例身体。

{
  scope: 'app',
  userId: 'some_userId',
  credentialRequired: true,
  email: 'test@email.com',
  properties: { picture: 'https://s.gravatar.com/avatar/.....' }
}

响应体

{"error":{"code":"bad_request","description":"Invalid JWT body. Cannot use userId param with app scope"}}

响应头

  { connection: 'close',
     server: 'nginx',
     date: 'Tue, 21 Feb 2017 14:47:50 GMT',
     'content-type': 'application/json; charset=utf-8',
     'content-length': '105',
     'x-powered-by': 'Express',
     vary: 'X-HTTP-Method-Override',
     etag: 'W/"69-huba/v8EazhrDAoySthrKw"',
     via: '1.1 vegur' },
  statusCode: 400,
  statusMessage: 'Bad Request' }
4

1 回答 1

1

我认为您可能会混淆两个独立的概念 - JWT 有效负载与 HTTP 请求正文。

scope在您的 JWT 凭证的有效负载中定义(Bearer ${token}在您的代码示例中)。有关 JWT 和范围的更多信息,请参见此处

userId应在 HTTP 请求正文中指定。

我不确定您使用的是什么语言,但这是 Node.js 中的一个示例:

var jwt = require('jsonwebtoken');
var token = jwt.sign({ scope: 'app' }, SECRET, { headers : { kid: KEY_ID } });

var request = require('request');
request.post({
    url: 'https://api.smooch.io/v1/appusers',
    headers: {
        'Authorization': `Bearer ${token}`
    },
    json: {
        userId: 'some_userId',
        credentialRequired: true,
        email: 'test@email.com',
        properties: { picture: 'https://s.gravatar.com/avatar/.....' }
    }
});
于 2017-02-21T16:17:56.597 回答