問題
- HTTPヘッダーで認可を受け、URL http://localhost:8080/o/greetings/morningにアクセスすると、ウェブサービスはブラウザに以下のエラーメッセージ [XML 形式] でリクエストに応答します。
<Forbidden><message>Access denied to sample.rest.application.Samplexxxx#working</message></Forbidden>
-
レストAPIを作成する手順
- このヘルプセンターの記事に従って、 レストモジュール API を作成してください
-
今回は、
@Component
アノテーションの設定プロパティ以外は、JAX-RSサンプルモジュールに変更はありません。 -
注:要件に従って、以下のことを確認してください。
- サービスエンドポイント、認証に表示されるサービス、プロパティは、さらに構成するために必要な場合があります。
-
参照:
-
問題を再現するための手順
- サーバーを起動し、管理者認証でログインします。
- サンプルのレストプラグインをデプロイする
-
JAX-RSのWebサービスに対する認証
- OAuth 2認証です:
- コントロールパネル → 設定 → OAuth2 Administration に移動します。
- プラスアイコンをクリックし、説明的な名前を使用してアプリケーションを追加します。
- 例えば、以下のような感じです: Client Credentials 認証タイプを自動選択する「Headless Server profile」テンプレートを選択します。
- OAuth 2認証です:
-
-
-
- 注:この作成したアプリケーションから Client ID と Client Secret をコピーし、これらを使用して Web サービスに認証します。
- この例では、 の curl ツールを使用して、 OAuth トークン をリクエストしています。
- アプリケーションのclient_idとclient_secretを指定して、以下のコマンドを実行します。
-
-
curl http://localhost:8080/o/oauth2/token -d 'grant_type=client_credentials&client_id=id-XXXXXXXXXXXXXXXX&client_secret=secret-XXXXXXXXXXXXXXXXXXXXXXXXX'
-
-
- トークンは、JSON形式で以下のように生成されます。
-
{"access_token":"XXXXXXXXXXXXXXXXXXXXXXXXXX","token_type":"Bearer","expires_in":600}
-
-
- 生成されたトークンを使って、以下のコマンドを実行し、サービスを呼び出しています。
-
観察された動作
HTTPヘッダで認可を受け、URL http://localhost:8080/o/greetings/morning、ウェブサービスはブラウザに以下のエラーメッセージ[XML形式]でリクエストに応答します。
-
<Forbidden><message>Access denied to sample.rest.application.Samplexxxx#working</message></Forbidden>
環境
- Liferay-dxp-7.2.10-ga1 と Liferay-fix-pack-dxp-1-7210 のバンドル。
- HSQLデータベース [Liferay DXPは、初期状態では組み込みのHSQLデータベースを使用するように設定されていますが、HSQL DBは主にデモや試用を目的としています]。
解像度
-
以下の手順で問題を解決することができます:
- 開発用のパブリックエンドポイントを作成します。 この例では、公共サービスの場合、 @Componentアノテーションのプロパティの下に以下の2つのプロパティを設定します。
"auth.verifier.guest.allowed=true",
"liferay.access.control.disable=true"
-
- 要件に応じたエンドポイントを追加した後、プラグインを再構築し、デプロイします。
- 注: 詳しくは「サービスアクセスポリシー」 をご覧ください。
- 認可があれば、ウェブサービスを呼び出すことができ、リクエストに応答することができます。 この例では、以下のようにWebサービスが呼び出され、リクエストに応答しています。