0

インターネットに公開したい Moodle LMS からいくつかの内部 API へのアクセスを処理するために、WSO2-AM を実装しています。

WSO2 経由でこの LMS へのアクセスを構成していますが、解決できない問題に遭遇しました。

WSO2 のドキュメントが広範囲にわたることは認識していますが、この構成の特定のインスタンスを実際に見つけることはできませんでした。

背景: Moodle 自体は非常に非標準的な方法で API を実装しています。彼らはそれらを REST と呼んでいますが、真の休息ではありません。ユーザー トークンなどの一部のパラメーターは、クエリ自体の本文でヘッダーを使用するのではなく、URL クエリ文字列で渡されます。

まず、WSO2 で 2 つの API を構成しました。1 つは Moodle からユーザー トークンを要求するため (Moodle では、特定のユーザーに API へのアクセスを許可するためにこれが必要です)、もう 1 つはユーザーが登録したコース リストを取得するためです。

WSO2 経由で Moodle からユーザー トークンを取得する最初の要求は、期待どおりに進行します。ユーザー名/パスワード/サービス パラメーターをヘッダー経由で (HTTPS 経由で暗号化されるように) ヘッダーを介して渡し、POST として Moodle にプッシュします。WSO2 を介した Moodle からの応答は期待どおりで、クラ​​イアントが解析して後続の要求で使用するトークンを含む JSON ペイロードです。

次のリクエストは、ユーザーが登録したコースを取得するために、Moodle でより便利なサービスを呼び出すことです。ここには、解決方法がわからない 2 つの問題があります。

問題: Moodle は、Web サービスへの呼び出しに GET または POST パラメータを期待します。テストに便利な GET を使用している場合、クライアントから WSO2 に渡されたパラメーターが間違っている (「userid」の場合) か、欠落している (投稿にある wstoken フィールドの場合)。体)。

API パブリッシャーでは、{version}/courses/{userid} の URL パターンで POST 用に構成された WSO2 の API を持っています。API 定義は次のように構成されています。 API 定義

API エンドポイントの構成は次のとおりです。 API エンドポイントの構成

URL: http://(moodleurl)/webservice/rest/server.php?wstoken= {uri.var.wstoken}&wsfunction=core_enrol_get_users_courses&moodlewsrestformat=json&userid={uri.var.userid}

Apache ホスティング Moodle が受け取る GET URL は次のとおりです: xx.xx.xx.xx - - [09/Aug/2016:10:36:03 +0930] "POST /webservice/rest/server.php?wstoken=&wsfunction=core_enrol_get_users_courses&moodlewsrestformat =json&userid=6/6 HTTP/1.1" 200 270

したがって、2 つの問題は、「wstoken」パラメーター (WSO2 に提供される投稿本文にある) の欠落と、「userid」がアイテム間のスラッシュで二重になっていることです。

プロキシ経由でクライアントを実行しましたが、データは WSO2 に正しく送信されているようです。 クライアント -> WSO2 プロキシ

だから私はこれらの問題について何ができるのだろうかと思っています:

サービス API アドレスへの URL に投稿された本文パラメーターを正しく含めるために使用できる別の URL パラメーターはありますか?

userid パラメータがこのように壊れる原因となっている特定の構成上の問題はありますか?

クライアントから投稿されたパラメーターは、WSO2 による Moodle への投稿に含まれているようです。したがって、それらは URL から削除され、単に WSO2 によって Moodle への投稿本文に含まれる可能性があります。つまり、これを機能させるために解決する必要があるのは、userid パラメータの問題だけである可能性が高いことを意味します - 残念ながら私はそうではありませんWSO2 と Moodle 自体の間にプロキシを配置して、Wireshark を使用せずに、API にポストされたパラメータを検証する方法を確認してください。

4

1 に答える 1