【问题标题】:OpenTok Rest Service Invalid JWT Error on Fiddler RequestFiddler 请求上的 OpenTok Rest Service 无效 JWT 错误
【发布时间】:2016-12-27 19:46:54
【问题描述】:

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

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

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

主机:api.opentok.com

X-OPENTOK-AUTH: json_web_token

接受:应用程序/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

【问题讨论】:

    标签: rest jwt fiddler opentok tokbox


    【解决方案1】:

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

    我的payload示例在C#中如下:

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

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

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

    【讨论】:

    • ist 是否等于“project”而不是“myprojectname”?真的吗?一定是在开玩笑……让我试试看。我会让你知道结果。
    • ist 的一些背景知识:TokBox 在不同的上下文中使用用户和帐户级别的其他声明。需要此字段来区分不同的颁发者声明类型。
    • @TuğrulKarakaya 那么,进展如何?你解决问题了吗?
    • 我尝试使用旧方法 'connection.setRequestProperty("X-TB-PARTNER-AUTH", "45737392:db4****b51a4032a838**4c865d19****01");'我的代码从 REST 服务正确获取 sessionID。这意味着调用服务的我的 Java 代码是可以的。但是在尝试使用带有有效负载的新方法和建议方法时,仍然会出现 403 错误。尝试了所有的可能性。请在下面找到我的代码;
    • 这里我的payload创建者payload = Jwts.builder() .setIssuedAt(currentTime) .setIssuer("45737392") .setExpiration(afterAddingFiveMins) .claim("ist", "project") .signWith( SignatureAlgorithm.HS256, "db4fde14b51a4032*********c865d19a14be01") .compact();返回有效载荷;但即使我在 jwt.io 上创建了有效负载,它仍然无法正常工作。奇怪的任何想法@R.Cha
    【解决方案2】:

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

    您的 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;
    

    【讨论】:

      猜你喜欢
      • 2016-11-06
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2014-12-11
      • 2017-11-29
      • 1970-01-01
      • 2019-04-09
      相关资源
      最近更新 更多