サービスアクセスポリシー

サービスアクセスポリシーは、どのサービスまたはサービスメソッドをリモートで呼び出すことができるかを定義するWebサービスセキュリティの追加レイヤーです。そのため、リモートサービスにのみ影響し、ローカルサービスには影響がありません。複数を一度に適用して、複合効果を生み出すことができます。サービスアクセスポリシーが全体にどのように適合するかを理解するために、Liferay DXPのWebサービスセキュリティレイヤーの概要を以下で説明します。

**IP許可レイヤー:**Webサービス呼び出し要求の発信元のIPアドレスは、ポータルプロパティーファイルのホワイトリストに記載されている必要があります。ホワイトリストに含まれていないIPアドレスからのWebサービスの呼び出しの試行は、自動的に失敗します。

**サービスアクセスポリシーレイヤー:**Webサービスの呼び出し要求に対応するメソッドは、有効になっている各サービスアクセスポリシーによってホワイトリストに登録されている必要があります。ワイルドカードを使用すると、明示的にホワイトリストに登録する必要があるサービスクラスとメソッドの数を減らすことができます。

**認証/検証レイヤー(ブラウザのみ):**Webサービスの呼び出し要求がブラウザから送信される場合、その要求には認証トークンが含まれている必要があります。 この認証トークンはp_authURLパラメータの値です。認証トークンの値はLiferay DXPによって作成され、ブラウザセッションに関連付けられています。JSON WebサービスのAPIページまたはLiferay.Service(...)を使用したJavaScriptを介してLiferay DXPのWebサービスを呼び出すと、p_authパラメータが自動的に提供されます。Liferay DXPが発信者の認証トークンをポータルユーザーに関連付けることができない場合、Webサービスの呼び出し要求は失敗します。

**ユーザー権限レイヤー:**正しく実装されたWebサービスには、権限チェックがあります。Webサービスを呼び出すユーザーには、そのサービスを呼び出す権限が必要です。

図1:サービスにアクセスするには、要求はドア錠のような役割のユーザー権限、南京錠のような役割の検証レイヤー、煉瓦の壁のような役割のサービスアクセスポリシー、そして最後に金庫のような役割の定義済みのIPアクセス許可を通過する必要があります。

サービスアクセスポリシーは許可システムを尊重することに注意してください。サービスアクセスポリシーによってリモートサービスへのアクセスがユーザーに許可されている場合でも、ユーザーはそのサービスを呼び出すための適切な権限を持っている必要があります。

モバイルデバイスやLiferay SyncインスタンスなどのリモートアプリケーションがWebサービスにアクセスする必要がある場合は、サービスアクセスポリシーが特に役立ちます。 管理者はサービスアクセスポリシーを使用して、これらのデバイスが実行時に変更できる承認済みリストだけからリモートサービスを呼び出せるようにすることができます。

サービスアクセスポリシーの管理

[コントロールパネル]へ行き、[設定]の見出しの下にある*[サービスアクセスポリシー]*をクリックします。ここでは、デフォルトのサービスアクセスポリシーを確認したり、新しいものを追加したりできます。サービスアクセスポリシーを作成または編集するときは、次の点に注意してください。

  • サービスアクセスポリシー名はポータルインスタンスごとに一意である必要があります。

  • サービスアクセスポリシー名に含めることができるのは、以下の文字だけです。

     0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#:@-./_
    
  • サービスアクセスポリシーのタイトルはローカライズできますが、サービスアクセスポリシー名はローカライズできません。

  • 許可されたサービス署名は1行に1つずつ入力する必要があります。ワイルドカード(*)は、クラス名とメソッド名の両方に使用できます。#シンボルは、メソッド名からクラス名を区切るために使用する必要があります。例えば、例えば、

     com.liferay.portal.kernel.service.UserService
    

    UserServiceクラスの任意のメソッドを呼び出すことを許可します。

     com.liferay.document.library.kernel.service.DLAppService#get*
    

    getで始まるDLAppServiceから、任意のメソッドを呼び出すことを許可します。したがって、

     com.liferay.portal.kernel.service.UserService
     com.liferay.document.library.kernel.service.DLAppService#get*
    

    UserServiceクラスの任意のメソッドを呼び出すこと、および名前がgetで始まるDLAppServiceの全てのメソッドを呼び出すことができます。

デフォルトで有効になっているサービスアクセスポリシーは6つあります。

  • ASSET_ENTRY_DEFAULT
  • CALENDAR_DEFAULT
  • SYNC_DEFAULT
  • SYNC_TOKEN
  • SYSTEM_DEFAULT
  • SYSTEM_USER_PASSWORD

ASSET_ENTRY_DEFAULTは、アセットの取得時にアセットのビューカウンタを更新することができます。CALENDAR_DEFAULTは、カレンダーで公開イベントを検索できるようにします。SYSTEM_DEFAULTポリシーは、認証されていない要求を含むすべてのリクエストに適用されます。このポリシーは、JavaScriptの呼び出しによる国/地域サービスへのアクセスを許可するので、ユーザーはその場で言語を切り替えることができます。SYSTEM_USER_PASSWORDポリシーは、AuthVerifierResult.isPasswordBasedAuthenticationtrueである要求に適用されます。つまり、ユーザー認証がパスワードを使用して行われたときはいつでも適用されます。許可されたメソッド署名のリストは*なので、あらゆるAPIを呼び出すことができます。もちろん、API関数には権限チェックが含まれているため、この呼び出しはユーザーが必要な権限を持っている場合にのみ機能します。特定のAPI関数の呼び出しを完全に無効にしたい場合は、SYSTEM_USER_PASSWORDポリシーを*より制限の厳しいものに変更できます。

SYNC_DEFAULTポリシーは、認証されていない同期要求を含むすべてのLiferayの同期要求に適用されます。許可されたメソッド署名のリストには、com.liferay.sync.service.SyncDLObjectService.getSyncContextのメソッドだけが含まれています。 SYNC_TOKENポリシーは、認証トークンを伴う同期要求に適用されます。許可された署名のリストにはcom.liferay.sync.service.*が含まれています。つまり、このパッケージのクラスのメソッドであるAPI関数はすべて呼び出すことができます。

SYNC_DEFAULTSYSTEM_DEFAULTは、その名前が示すように、デフォルトのサービスアクセスポリシーです。デフォルトのサービスアクセスポリシーは、認証されていない要求を含むすべての着信要求に適用されます。

新しいデフォルトのサービスアクセスポリシーを作成できます。

  1. [コントロールパネル]の*[設定]* → *[サービスアクセスポリシー]*セクションへ行きます。

  2. 追加追加する)をクリックします。

  3. ポリシーを有効にするためにスイッチを切り替えます。

  4. ポリシーを認証された要求だけでなく認証されていない要求にも適用する場合は、*[デフォルト]*というラベルの付いたスイッチを切り替えます。

  5. ポリシーにタイトルをつけます。

  6. [許可されたサービス署名]に、インストールされているサービスクラスの完全修飾名の入力をします。コード補完はクラスを見つけるのに役立ちます。 たとえば、Liferayのナレッジベースアプリケーションのポリシーを作成している場合は、com.liferay.knowledge.base.service.KBArticleServiceと入力します。

  7. [メソッド名]で、サービスメソッド呼び出しの入力を開始します。ここでも、コード補完が役立ちます。ナレッジベースの場合は、getKBArticleと入力します。

  8. 別のサービスまたはメソッドを指定するには、プラスアイコンをクリックして別のエントリを追加してください。

  9. 完了したら、*[保存]*をクリックします。

Liferayアプリケーションは独自のデフォルトポリシーを宣言できます(SYNC_DEFAULTポリシーが良い例です)。このポリシーは、管理者によって変更、または無効にすることができます。この場合、プラグインはまだポリシーが存在することを確認できるので、再定義や更新をする必要はありません。

デフォルトでは、LiferayのトンネリングサーブレットはSYSTEM_USER_PASSWORDサービスアクセスポリシーを使用しています。しかしながら、トンネリングサーブレット用に独自のポリシーを作成し、TunnelingServletAuthVerifierservice.access.policy.name プロパティを使用して、デフォルトのポリシーの代わりに独自のポリシーを使用するように指定することができます。

サービスアクセスポリシーのモジュール

Liferayのサービスアクセスポリシー機能は、サービスアクセスポリシーモジュールによって提供されます。このモジュールには、以下の重要なクラスが含まれています。

  • com.liferay.portal.kernel.security.service.access.policy.ServiceAccessPolicyServiceAccessPolicyの公開インタフェースを定義します。
  • com.liferay.portal.kernel.security.service.access.policy.ServiceAccessPolicyManagerServiceAccessPolicyのインスタンスを取得するための公開インタフェースを定義します。
  • com.liferay.portal.kernel.security.service.access.policy.ServiceAccessPolicyManagerUtil:サービスアクセスポリシー機能を、まだモジュール化されていないLiferayのコア部分に橋渡しします。
  • com.liferay.portal.kernel.security.service.access.policy.ServiceAccessPolicyThreadLocalServiceAccessPolicyインスタンスをアクティブにします。

Liferayのサービスアクセスポリシーモジュールは、ソースコード内のmodules/apps/service-access-policyフォルダにあります。実行時に、以下の3つのバンドルがサービスアクセスポリシー機能を提供します。([Liferay Home]/osgi/modulesフォルダ内にあります)

  • com.liferay.service.access.policy.api.jar
  • com.liferay.service.access.policy.service.jar
  • com.liferay.service.access.policy.web.jar

上記のモジュールは、[コントロールパネル]からアクセスできるサービスアクセスポリシー管理UIを提供します。そして、ServiceAccessPolicyのインタフェースとデフォルトの実装も提供します。

サービスアクセスポリシーモジュールを設定するには、[コントロールパネル]へ行って、*[システム設定]をクリックし、[セキュリティ]セクションで[サービスアクセスポリシー]*モジュールを見つけます。名前をクリックして、編集します。ここで、デフォルトのサービスアクセスポリシー設定を編集できます。AuthVerifierで何もポリシーが適用されていない場合でも、デフォルトのポリシーを適用するように強制することもできます。

また、AuthenticatedAccessControlPolicyもあります。ServiceAccessPolicyManagerの実装が存在する場合、このポリシーは何もしません。ただし、サービスアクセスポリシーモジュールが無効になっている場合は、 AuthenticatedAccessControlPolicyによってWebサービスへの認証アクセスを必要とするフォールバックが提供されます。

まとめ

サービスアクセスポリシーによってLiferay DXPのWebサービスへのアクセスを制限する方法は以上です。カスタムサービスアクセスポリシーはポータル管理者が作成できます。ポータルのトークンオーセンティケーター、例えばOAuthによって適用されます。

関連トピック

サービスアクセスポリシーの作成

« Liferay DXPへのログイン認証ベリファイア »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています