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

OpenTok Rest Service Invalid JWT Error on Fiddler Request

我正尝试按照建议使用 JWT 对象通过 Rest 服务创建 OpenTok 会话。我尝试用 Fiddler 生成会话。

这是我的 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 {"code":-1,"message":"Invalid token format"} 错误可能意味着我的 JWT 对象不正确。我尝试使用 http://jwt.io(如 opentok 所建议的那样)和其他站点来创建它,所有这些看起来都是正确的并且与 tokbox (opentok) 站点上的非常相似。

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

可能是因为我用的是opentok试用版? JWT creation Parameters

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

我的负载示例在 C# 中如下所示:

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

"ist" 的值应设置为 "project",而不是项目的实际名称。

更新:看你的截图,我可以说你没有在最右下角设置密钥(这里是你在TokBox账户>项目中的ApiKeySecret)。

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

您的 Opentok API 密钥不应直接用作 Sign 参数。如下图java中,要先编码

Base64.encodeToString("db4******b51a4032a83*******5d19a*****e01".getBytes(),0)

我还没有在 http://jwt.io 和 fiddler 上尝试过,但它似乎也适用于它。谢谢。完整代码如下;

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;