認証されていないリクエストを行う
デフォルトでは、Liferay DXP はセキュリティ上の理由から API アクセスを制限しており、有効な応答を取得するには認証が必要です。 ただし、場合によっては、ゲストアクセス用のAPIを開くことがよい場合があります。
資格情報を渡さずに API リクエストを行うと、通常はエラー応答が返されます。 access.control.sanitize.security.exception ポータル プロパティ が falseに設定されている場合、エラーには次のメッセージが含まれます。
curl localhost:8080/o/headless-admin-user/v1.0/sites/20122
{
"message" : "Access denied to com.liferay.headless.admin.user.internal.resource.v1_0.SiteResourceImpl#getSite"
}
開発環境の外部では、 access.control.sanitize.security.exception を false に変更しないでください。そうしないと、認証されていないユーザーには不要な API の詳細が表示されなくなります。 com.liferay.portal.security.access.control.AccessControlAdvisorImpl ログレベル を DEBUG に設定しても、このメッセージが有効になります。
認証情報なしでAPIにアクセスする必要がある場合は、サービス・アクセス・ポリシーを介して無制限のアクセスを許可します。
サービス・アクセス・ポリシーによるAPI制限の緩和
サービス アクセス ポリシー を使用して、API アクセスを詳細なレベルで定義できます。
-
ブラウザで
http://localhost:8080にアクセスします。 -
デフォルトの認証情報を使用してサインインします。
ユーザー名:
test@liferay.comパスワード:test -
グローバル メニュー (
) → コントロール パネル → セキュリティ → サービス アクセス ポリシーに移動します。 -
追加 (
) をクリックします。 -
ポリシーにわかりやすい名前を付けます。 「SITE_API_GUEST_ACCESS」などのようにするとよいでしょう。
-
[Enabled]に切り替えて、ポリシーを有効にします。
-
[デフォルト]というラベルの付いたトグルを切り替えて、認証されていないリクエストと認証されているリクエストにポリシーを適用します。
-
ポリシーにローカライズされたタイトルをつけます(例:ゲストにサイトAPIへのアクセスを許可する)
-
下部にある[詳細モードに切り替え]をクリックします。
-
上のエラーメッセージからメソッドシグネチャをコピー&ペーストします:
com.liferay.headless.admin.user.internal.resource.v1_0.SiteResourceImpl#getSite -
[保存]をクリックします。
ポリシーでは、Liferay の内部サービス層クラスではなく、Liferay の外部ヘッドレス API クラスを使用するようにしてください。

これでサービス・アクセス・ポリシーが有効になり、ゲストにサイトAPIへのアクセスが許可されます。
アクセスの確認
サービス・アクセス・ポリシーの変更が適用されたため、以前は失敗したAPI呼び出しが成功します。
curl localhost:8080/o/headless-admin-user/v1.0/sites/20122
{
"availableLanguages" : [ "en-US" ],
"description" : "",
"friendlyUrlPath" : "/guest",
"id" : 20122,
"key" : "Guest",
"membershipType" : "open",
"name" : "Guest",
"parentSiteId" : 0,
"sites" : [ ]
}
このパターンを適用して、ヘッドレスREST APIへのアクセスを開くことができます。 サービス・アクセス・ポリシーの柔軟性を活用して、必要に応じて詳細な設定が可能です。
すべてのAPIが単一のエンドポイントに統合されているため、サービス・アクセス・ポリシーでは、ヘッドレスREST APIほど簡単にGraphQL APIを区別できません。 したがって、このように GraphQL アクセスを開くことは場合によっては機能するかもしれませんが、誤って多くのデータへのアクセスを許可してしまう可能性があるため、通常は推奨されません。