尝试创建D2L用户帐户时获取无效令牌响应

时间:2013-01-04 16:18:30

标签: desire2learn

我正在尝试使用他们的Valence API从第三方应用程序中修改D2L数据库。我已经完成了一些操作,但我仍然试图创建一个新的用户帐户。有人告诉我,我工作的帐户有权这样做。

我已经定义了一个JSON对象来保存我想要的值: {     “OrgDefinedId”:“XX000TEST”,     “FirstName”:“汤姆”,     “中间名字”: ””,     “姓氏”:“Foolery”,     “ExternalEmail”:“tom@something.com”,     “UserName”:“Tom.Foolery”,     “RoleId”:“78”,     “IsActive”:“真实”,     “SendCreationEmail”:“false” }

我将上述文本复制到HTTP post缓冲区,然后调用以下链接: /d2l/api/lp/1.0/users /?

参数字符串包含Valence文档中指定的ID和签名(x_a,x_b等)。我假设授权值是正确的,因为我在其他Valence查询上使用相同的算法时得到了正确的结果。

有关如何通过“无效令牌”消息的任何建议将不胜感激。

- 斯坦

1 个答案:

答案 0 :(得分:2)

如果您收到403“无效令牌”消息,那么由于某种原因,您不能正确地形成x_a,x_b,x_c或x_d身份验证令牌。我们过去常见的问题是:

  • 尝试重复使用为另一个API调用生成的x_c和/或x_d签名

  • 交换令牌:x_a是App ID,x_c是App Sig,x_b是用户ID,x_d是用户Sig

  • 使用错误的HTTP 方法生成签名(该方法是签名基本字符串的组成部分之一)

  • 不在基本字符串中使用HTTP方法的所有大写字母(组件应为GET而不是get

  • 未在基本字符串中使用所有小写字母作为API路由,或包含不正确的字符:例如,在您的问题中,您似乎暗示您正在传入?作为路线的一部分;你不应该这样做。在这种情况下,用于创建网址的基本字符串应为POST&/d2l/api/lp/1.0/users/&1234567,其中1234567应替换为您生成的时间戳,并传入x_t

  • 使用提供API版本组件的API路由,但在使用其他版本组件进行调用时(即使用/d2l/api/lp/1.0/...生成但使用/d2l/api/lp/1.1/...进行调用)

  • 在基本字符串中使用不正确/不匹配的时间戳值(用于基本字符串的时间戳应以秒为单位,与x_t值相同)

  • 虽然之前的呼叫有效,但突然没有任何呼叫使用403无效令牌结果:用户令牌可能已过期而您需要重新验证用户

  • 虽然先前对测试实例进行了调用,但当您尝试移动到其他LMS(例如prod实例)时,调用不起作用:可能是App ID / Key对未显示在此新的LMS,或者你试图使用一个LMS的用户ID /密钥对在不同的LMS上生成签名

另请注意,您的JSON对象严格未正确形成:IsActiveSendCreationEmail属性的值分别为truefalse,而不是{{1}和"true",虽然服务器端的LMS解析器可能会原谅它。

如果这些点都不能为您提供帮助,请随时在我们的问题跟踪器中打开问题,或联系我们的Valence支持电子邮件地址,我们可以帮您解决此问题。

注意请注意,无效令牌会使您返回403(但该消息将为“无效令牌”或“过期令牌”或类似消息)。如果你的令牌是正确生成的,但是你的主叫用户上下文不允许创建用户,那么你得到403,但这次消息将是“Not Permitted”或“Not not授权“或类似。确保你仔细检查你正在回来的排序 403。

在这种特殊情况下,创建用户的权限有点棘手;您不仅必须拥有创建用户的权限,还必须具有修改将在CreateUserData结构(OrgDefinedId,Email等),您还必须能够在“用户信息隐私”设置中看到所有这些字段,您必须有权注册您在组织级别提供的用户角色。那些最后两位在过去绊倒了我们的一些客户。