1

Valence API を使用して、サードパーティ アプリケーション内から D2L データベースを変更しようとしています。いくつかの操作が機能するようになりましたが、新しいユーザー アカウントを作成しようとして行き詰まりました。私が使用しているアカウントには、これを行う権限があると言われました。

必要な値を保持する JSON オブジェクトを定義しました: { "OrgDefinedId": "XX000TEST", "FirstName": "Tom", "MiddleName": "", "LastName": "Foolery", "ExternalEmail": "tom@something.com", "UserName": "Tom.Foolery", "RoleId": "78", "IsActive": "true", "SendCreationEmail": "false" }

上記のテキストを HTTP ポスト バッファにコピーし、次のリンクを呼び出しました: /d2l/api/lp/1.0/users/?

パラメーター文字列には、Valence ドキュメントで指定されている ID と署名 (x_a、x_b など) が含まれています。他の Valence クエリで同じアルゴリズムを使用すると正しい結果が得られるため、認証値は正しいと思います。

「無効なトークン」メッセージを回避する方法についての提案をいただければ幸いです。

--スタイン

4

1 に答える 1

2

403「無効なトークン」メッセージが表示される場合は、何らかの理由で、x_a、x_b、x_c、または x_d 認証トークンを正しく形成していません。過去に見られた一般的な問題は次のとおりです。

  • ある API 呼び出し用に生成された x_c または x_d 署名を別の API 呼び出しで再利用しようとしています

  • トークンを入れ替える: x_a は App ID、x_c は App Sig、x_b は User ID、x_d は User Sig

  • 間違った HTTPメソッドを使用して署名を生成する(メソッドは、署名のベース文字列のコンポーネントの 1 つです)

  • ベース文字列の HTTP メソッドにすべて大文字を使用していない (コンポーネントは使用しGETないでくださいget)

  • ベース文字列の API ルートにすべて小文字を使用していないか、不適切な文字が含まれています。たとえば、質問で?は、ルートの一部として を渡していることを暗示しているようです。あなたはこれをすべきではありません。この場合、URL を作成するための基本文字列は、生成したタイムスタンプに置き換え、x_t で渡す必要がありますPOST&/d2l/api/lp/1.0/users/&12345671234567

  • 提供された API バージョン コンポーネントで API ルートを使用するが、呼び出すときは別のバージョン コンポーネントを使用する (つまり、 で生成する/d2l/api/lp/1.0/...が で呼び出す/d2l/api/lp/1.1/...)

  • ベース文字列で誤った/不一致のタイムスタンプ値を使用している (ベース文字列に使用するタイムスタンプは秒単位で、x_t 値と同じスタンプである必要があります)

  • 以前は呼び出しが機能していましたが、突然 403 無効なトークンの結果でどの呼び出しも機能しなくなりました。ユーザー トークンの有効期限が切れている可能性があり、ユーザーを再認証する必要があります。

  • 以前は呼び出しがテスト インスタンスに対して機能していましたが、別の LMS (たとえば、prod インスタンス) に移動しようとすると、呼び出しが機能しません。おそらく、アプリ ID/キーのペアがこの新しい LMS に表示されていないか、ある LMS のユーザー ID/キー ペアを使用して別の LMS で署名を生成しようとしている

また、JSON オブジェクトが厳密に正しく形成されていないことに注意してください。 サーバー側の LMS パーサーがそれを許容する可能性はありますが、IsActiveおよびSendCreationEmailプロパティの値はそれぞれtrueおよびfalseではなく"true"、 およびである必要があります。"false"

これらのポイントのいずれも役に立たない場合は、Issue Tracker でお気軽に問題を開くか、Valence サポートの電子メール アドレスにお問い合わせください。この問題を解決するお手伝いをいたします。

注意トークンが無効な場合、403 が返されることに注意してください (ただし、メッセージは「無効なトークン」または「有効期限切れのトークン」などになります)。トークンが正しく生成されていても、呼び出し元のユーザー コンテキストでユーザーの作成が許可されていない場合は、403 が返されますが、今回のメッセージは "許可され​​ていません" または "許可され​​ていません" などになります。どのような種類の 403 が返されているかを再確認してください。

この特定のケースでは、ユーザーの作成に関するパーミッションは少しトリッキーです。ユーザーを作成する権限が必要なだけでなく、CreateUserData 構造で API に渡すプロパティ (OrgDefinedId、Email など) を変更する権限も必要です。ユーザー情報のプライバシー設定でこれらすべてのフィールドを参照してくださいまた、組織レベルで提供したユーザー役割を登録する権限が必要です...これらの最後の2ビットは、過去に一部のクライアントをつまずかせました.

于 2013-01-05T00:21:46.683 に答える