我尝试使用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
答案 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;