メインコンテンツまでスキップ

制限をかけていないのにAPIから403 forbidden が返ってきます

コンテンツの作成をするAPI(Topics::insert)など、いくつかのエンドポイントはセキュリティ上、ログイン状態での利用が前提となっており、直接パブリックに利用できません。 ログイン処理後に利用するように設計するか、カスタム処理を利用してエンドポイントにリクエストを送ってください。

カスタム処理を利用して認証状態を付与した状態でエンドポイントを利用する方法には以下があります。

api_internal を利用する方法

Api::request_api のエンドポイントで、カスタム処理を呼び出し、呼び出されたカスタム処理で api_internal のプラグインを利用することで、認証情報を付与したい状態でTopics:insertのエンドポイントにリクエストを送ります。
api_internal では member_idパラメータを渡すことで、指定したメンバーIDが認証された状態でリクエストを実行できます。

カスタム処理の設定

まずカスタム処理で以下のコードを設定します。

{* リクエスト ボディ *}
{assign_array var='body' values=''}
{assign var='body.subject' value=$smarty.request.subject}

{api_internal
var='response'
status_var='status'
endpoint='/rcms-api/39/topics/insert'
method='POST'
queries=$body
member_id='1'}

{assign var=data value=$response}

Image from Gyazo

注意

/rcms-api/39/topics/insertのエンドポイントは Topics::insert のエンドポイントを使用し、APIの認証方式は「動的アクセストークン」に設定してください。

エンドポイントの設定

次にApi::request_api_post のエンドポイントを作成します。
nameにはカスタム処理で設定した識別子を入力してください。
また、APIは/rcms-api/39/topics/insertとは別にしてパブリックな認証にして下さい。

例)
Topics::insert:APIのセキュリティを動的アクセストークンにする。
Api::request_api_post:APIのセキュリティをCookieにする。

Image from Gyazo

Swagger UI でrequest_api_postのエンドポイントを叩くと、コンテンツが追加できていることが分かります。

Image from Gyazo

前処理を利用する方法

権限を持ったメンバーIDでログインするカスタム処理を作成し、エンドポイントの前処理に設定することでレスポンスを取得します。

カスタム処理の設定

まずカスタム処理で以下のコードを設定します。コンテンツ定義の閲覧権限をもっているメンバーIDを指定してください。

{login member_id=1 overwrite=false} {* member_id:1としてログインをします *}

Image from Gyazo

エンドポイントの設定

つづいて、追加したカスタム処理をTopics::insert のエンドポイントの前処理に設定します。

Image from Gyazo

Swagger UI でエンドポイントを叩くと、コンテンツが追加できていることがわかります。

Image from Gyazo

関連ドキュメント


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。