Fiddler请求中的OpenTok Rest服务无效的JWT错误

时间:2016-12-27 19:46:54

标签: rest jwt fiddler opentok tokbox

我尝试使用JWT对象的Rest服务创建OpenTok会话。我试图与Fiddler生成会话。

这是我的小提琴请求(出于安全原因,JWT字符串已部分更改为***)

POST https://api.opentok.com/session/create HTTP / 1.1

主持人:api.opentok.com

X-OPENTOK-AUTH:json_web_token

接受:application / json

内容长度:172

eyJ0eXAiOiJKV1QiL ****** iOiJIUzI1NiJ9.eyJpc3MiOjQ1NzM ****** OiJkZW5l ****** *** XQiOjE0ODI3OTIzO *** SOMESIGNEDKEYHERE。izvhwYcgwkGCyNjV ***** 2HRqiyBIYi9M

我得到403 {"代码": - 1,"消息":"无效的令牌格式"}错误可能意味着我的JWT对象不正确。我尝试使用http://jwt.io(如opentok建议的)和其他网站创建它,所有这些都看起来正确且非常类似于tokbox(opentok)网站上的那个。

我需要一个解释来修复它并创建一个会话。

可能是因为我正在使用opentok试用版? JWT creation Parameters

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我通过为有效负载部分设置正确的键值对来解决错误。

我的有效负载示例如下所示:C#:

var payload = new Dictionary<string, object>()
{
    { "iss", "45728332" },
    { "ist", "project" },
    { "iat", ToUnixTime(issued) },
    { "exp", ToUnixTime(expire) }
};

&#34; ist&#34;的价值应设置为&#34; project&#34;,而不是项目的实际名称。

更新:看看你的截图,我可以说你没有在右下角设置密钥(这里,它是来自TokBox帐户&gt;项目的你的ApiKeySecret)。

答案 1 :(得分:0)

好的,我终于找到了答案,

您的Opentok API密钥不应直接用作Sign参数。在如下所示的java中,它应该首先编码。

Base64.encodeToString(&#34; DB4 ****** ******* b51a4032a83 ***** 5d19a E01&#34; .getBytes(),0)

我还没有在http://jwt.io和小提琴手上试过它,但它似乎也会对它起作用。谢谢。完整代码如下;

payload = Jwts.builder()
             .setIssuedAt(currentTime)
             .setIssuer("YOUR_OPENTOK_KEY")
             .setExpiration(fiveMinutesAdded)
             .claim("ist", "project")
             .setHeaderParam("typ","JWT")
            .signWith(SignatureAlgorithm.HS256, Base64.encodeToString("YOUR_OPENTOK_SECRET".getBytes(),0))
            .compact();
    return payload;