2017-09-11 4 views
2

Hello Worldアプリケーションを作成する手順に従って、Serverlessフレームワークを試しました。 [url]/dev/hello-worldはjson出力を期待どおりに200応答します。存在しないエンドポイントに対してサーバーレスで403の代わりに404を返す方法はありますか?

既定では、存在しないエンドポイントの応答は、json {"message":"Missing Authentication Token"}の403 httpステータスコードです。

フレームワークを使用してウェブサイトをホストしたいと考えています。 存在しないエンドポイントに対して403の代わりにServerlessを返す方法はありますか?

答えて

3

40の代わりに403を返すのはdeliberate design decisionです。

これは他の多くのAWS API(特にS3)で使用されているパターンです。 S3で、ユーザが(ListBucketパーミッションを介して)キーの存在を見るためのパーミッションを持っていたら、404が返されます。それ以外の場合は403が返されます。 APIゲートウェイはメソッドレベルでアクセス権を有効にするため、APIリソースレベルの存在を知ることをユーザーに許可する必要があるかどうかを知ることができず、結果として403がデフォルトになります。

{proxy +}パターンを使用して、欠落しているAPIメソッドをすべてキャッチすることができます。

events: 
    - http: 
     path: {proxy+} # catch any path not specified elsewhere 
     method: get # or change to any method if you prefer 
+1

本当に素敵な発見!今、私はサービスが403を返す理由をよく理解しています。そして、回避策は魅力的に機能しました。すべてのhttp動詞でnot-foundリソースの404を返すように 'method:all'をセットするだけで修正しました。トレントありがとう! –

+0

トレント - イベントプロパティはserverless.ymlのルートに行きますか、それとも別の場所に行くのですか? –

+1

これは、APIのゲートウェイ内の他のすべてのURLをキャッチするために書く関数の中に入ります。 'serverless.yml'の構造についてはこちらを参照してください:https://serverless.com/framework/docs/providers/aws/guide/serverless.yml/ –

関連する問題