请求的验证与请求的要求之间似乎存在冲突。 API调用要求将范围设置为“app”。它还需要userId。但是,当两者合并时,您会得到以下消息,表明您无法将两者合并。
API https://docs.smooch.io/rest/#pre-create-app-user
REQUEST
{ 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' }
答案 0 :(得分:0)
我认为您可能会混淆两个单独的概念--JWT有效负载与HTTP请求正文。
scope
在JWT凭据的有效内容中定义(代码示例中为Bearer ${token}
)。有关JWT和范围的更多信息可以在here找到。
userId
。
我不确定您使用的是哪种语言,但这是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/.....' }
}
});