Desire2了解调用API的问题

时间:2014-08-08 14:48:43

标签: desire2learn

我试图使用valance api来调用几个方法。使用https://apitesttool.desire2learnvalence.com进行身份验证,从哪里获取UserId&用户密钥。现在我很困惑应该通过x_a - x_d参数来获取组织信息。

我通过了什么,我得到了403禁止&不正确的令牌例外。

有些人请帮忙。我在参数中传递了。。

x_a:应用程序ID

x_b:用户ID(我是从https://apitesttool.desire2learnvalence.com获得的)

x_c : private String calculateParameterExpectation( String key, String httpMethod, String apiPath, long timestamp) { String unsignedResult = String.format("%s&%s&%s", httpMethod, apiPath, timestamp); System.out.println(unsignedResult); String signedResult = D2LSigner.getBase64HashString(key, unsignedResult); return signedResult; } Where key is the App Key

x_d : private String calculateParameterExpectation( String key, String httpMethod, String apiPath, long timestamp) { String unsignedResult = String.format("%s&%s&%s", httpMethod, apiPath, timestamp); System.out.println(unsignedResult); String signedResult = D2LSigner.getBase64HashString(key, unsignedResult); return signedResult; } Where key is the User Signature that i got from https://apitesttool.desire2learnvalence.com

我不确定做错了什么。

1 个答案:

答案 0 :(得分:0)

请注意,每个后端服务都会生成唯一的UserID /密钥对,以便与每个用户和每个应用程序ID一起使用{ {3}}

这明确表示用户ID /密钥对不能从一个应用程序转移到另一个应用程序。它们也不能从一个后端服务转移到另一个后端服务 - 每个使用API​​的应用程序都应该请求自己的UserID / Key对代表每个不同的用户进行调用。即使您在使用api-test工具时使用您的应用程序ID /密钥,除非您将工具指向同一后端服务,而您实际上正在进行API调用,否则您赢了& #39;返回一个UserID / Key对,您可以使用它来稍后进行API调用(针对其他服务)。

请注意,签名机制要求您使用http-method字符串的大写版本(因此GET,而不是get),以及它要求您使用api路径字符串的小写版本(因此/d2l/auth/api/token,而不是/D2L/AUTH/API/TOKEN)。如果您将api-test工具指向同一个LMS,而您又想要进行API调用,并且您正在使用与您的api-test工具相同的App ID / Key对#39;在您的生产代码中重复使用,然后我会确保您将基本字符串格式化为完全正确的签名。

我还鼓励您更充分地使用D2L自己的客户端SDK库来进行应用/用户上下文管理和签名,而不是仅使用库中的原始签名调用。