2017-02-21 5 views
0

リクエストの検証とリクエストの要件との間に矛盾があるようです。 API呼び出しでは、スコープを 'app'に設定する必要があります。また、userIdが必要です。しかし、2つを組み合わせると、2つを組み合わせることができないことを示す以下のメッセージが表示されます。Smooch Pre-Create AppユーザーAPIにはスコープappとuserIdが必要ですが、スコープ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: '[email protected]', 
    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

私はあなたが混乱二つの別々の概念かもしれないと思う - HTTPリクエストボディVS JWTペイロード。

scopeは、JWT資格情報(コードサンプルのBearer ${token})のペイロードに定義されています。 JWTとスコープの詳細については、hereをご覧ください。

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: '[email protected]', 
     properties: { picture: 'https://s.gravatar.com/avatar/.....' } 
    } 
}); 
+0

は2つのペイロードの明白なミキシングアップを指摘いただきありがとうございます。この修正を適用すると、リクエストにペイロードも適切に提出していないことがわかりました。これはまったくPEBCAKの問題だったようです。 – Matt

関連する問題