我试图使用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
我不确定做错了什么。
答案 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库来进行应用/用户上下文管理和签名,而不是仅使用库中的原始签名调用。