---
title: 制限をかけていないのにAPIから403 forbidden が返ってきます
discription: いくつかのエンドポイントはセキュリティ上、ログイン状態での利用が前提となっており、直接パブリックに利用できません。ログイン処理後に取得するように設計するか、カスタム処理を利用してレスポンスを取得してください。
category: trouble
---

import StructuredDataFaqs from '@site/src/components/StructuredDataFaqs';

<StructuredDataFaqs faqs={[
    { question: "制限をかけていないのにAPIから403 forbidden が返ってきます", answer: "いくつかのエンドポイントはセキュリティ上、ログイン状態での利用が前提となっており、直接パブリックに利用できません。ログイン処理後に取得するように設計するか、カスタム処理を利用してレスポンスを取得してください。" }
]} />

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

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

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

### カスタム処理の設定
まず[カスタム処理](/ja/docs/management/function/)で以下のコードを設定します。

```smarty
{* リクエスト ボディ *}
{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](https://t.gyazo.com/teams/diverta/14c79cc9fdf10d1a51c377b34c1730c4.png)

:::caution
`/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](https://t.gyazo.com/teams/diverta/51abf9df3a797c09386c82ca5b90fb75.png)

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

![Image from Gyazo](https://t.gyazo.com/teams/diverta/c1f273d6911ab283f1827592b8d709fd.png)

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

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

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

![Image from Gyazo](https://t.gyazo.com/teams/diverta/67da285ec25e4882a9464aaa68ae72a4.png)

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

![Image from Gyazo](https://t.gyazo.com/teams/diverta/32a842214d9fb33fa62712529f51407e.png)

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

![Image from Gyazo](https://t.gyazo.com/teams/diverta/5c8ad254937ef43e81f00c3d3c2072d8.png)

## 関連ドキュメント
- [カスタム処理からKurocoのAPIを呼び出せますか？](/ja/docs/faq/how-to-request-kuroco-api-from-smarty-function/)
- [カスタム処理と紐づいたAPIエンドポイントを作成する](/ja/docs/tutorials/creating-a-custom-function-endpoint/)
- [Pre-processing](/ja/docs/reference/pre-processing/)
- [Smartyプラグイン](/ja/docs/reference/smarty-plugin/)