問題
- RESTサービス を開発してみましたが、動作しました。 しかし、エンドポイントのセキュリティが必要です。 現時点では資格情報なしで利用可能です。
- 資格情報なしでREST Webサービスにアクセスできるようにしたいわけではありません。
サービスEndpointを呼び出すために、ユーザに認証情報を送信させるにはどうすればよいでしょうか?
環境への配慮
- ライフレイDXP 7.0
決議
を使用して、簡単な ユーザー権限レイヤー を実装する方法を紹介します https://github.com/liferay/liferay-blad-samples/tree/7.0/liferay-workspace/apps/rest のサンプルプロジェクト。
- ビルドしてデプロイするとき(
liferay-blade-samples/liferay-workspace/apps/rest{7.0}$ ./../../../gradlew deploy
) このモジュールにアクセスして http://localhost:8080/o/com.liferay.blade.rest/users/list : ユーザーのリストを取得します。
Test Test
- UsersRestService.javaの関連メソッドを以下のように更新してみましょう。
@GET @Path("/list") @Produces("text/plain") public String getUsers() { PermissionChecker permissionChecker = PermissionThreadLocal.getPermissionChecker(); if (!permissionChecker.isCompanyAdmin()) { throw new WebApplicationException(Response.Status.FORBIDDEN); } StringBuilder result = new StringBuilder(); for (User user : _userLocalService.getUsers(-1, -1)) { result.append(user.getFullName()); result.append("\n"); } return result.toString(); }
ご覧のように、PermissionChecker を取得して、指定されたユーザが Company Admin であるかどうかをチェックしています。 そうでない場合は、JAX-RSアプリケーションから許可されている標準的な例外を投げます。 (例外処理の詳細はググってみてください)。
- モジュールを再配置して再テストします。 http://localhost:8080/o/com.liferay.blade.rest/users/list に再度アクセスすると、空のレスポンスとHTTP 403のステータスが返ってきます。
-
Basic Authでサービスの呼び出しをテストしてみましょう。
- "test@liferay.com:test"をbase64でエンコード: base64 <<< test@liferay.com:test :結果: dGVzdEBsaWZlcmF5LmNvbTp0ZXN0Cg ==
- エンドポイントを呼び出します。
curl -H "Authorization: Basic dGVzdEBsaWZlcmF5LmNvbTp0ZXN0Cg==" http://localhost:8080/o/com.liferay.blade.rest/users/list
結果は?
Test Test
- 同じことをomniadminではないユーザーにも繰り返してください: 予想通り空のレスポンスが返ってきます。
-
Basic Auth は、ここではこのアプリケーションで有効になっています。 https://github.com/liferay/liferay-blade-samples/blob/7.0/liferay-workspace/apps/rest/src/main/resources/configuration/com.liferay.portal.remote.cxf.common.configuration.CXFEndpointPublisherConfiguration-cxf.properties#L2が有効になっています。
- 同様に、セッションを介して認証されたユーザーでブラウザからエンドポイントにアクセスできるようにしたい場合は、
A.) システム設定 > ファンデーション > CXF エンドポイント > /com.liferay.blade.rest > に移動して、追加します。auth.verifier.PortalSessionAuthVerifier.urls.includes=*
或いは
auth.verifier.PortalSessionAuthVerifier.urls.includes=/users/list
を "Authentication Verifier Properties" に追加すると、サンプルサービスで Basic Auth と Portal Session の両方の認証ベリファイアが有効になります。
auth.verifier.BasicAuthHeaderAuthVerifier.urls.includes=/users/list // or simply "*" auth.verifier.PortalSessionAuthVerifier.urls.includes=/users/list // or simply "*"
B.) それを "rest "サンプルモジュールの設定ファイルに追加する
C.) システム設定 > Foundation > Portal Session Auth Verifier: に移動し、"URs Includes" プロパティに "/users/list" を追加します。
- 同様に、セッションを介して認証されたユーザーでブラウザからエンドポイントにアクセスできるようにしたい場合は、
会員限定記事
Liferay エンタープライズ サブスクリプションをお持ちのお客様は1500件を超えるベストプラクティス、トラブルシューティング、その他のソリューション記事を閲覧できます。ログインすると、記事全体をお読みいただけます。
ログイン