2017-11-01 3 views
7

aws python aws lambda APIにフラスコを使用しています。私はzappaでそれを展開した、それは意図したように働いた。しかし、CORSがhttps://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/blob/master/blueprints/python/api-gateway-authorizer-python.pyzafaコルスター付きフラスコ用カスタムオーサライザ

に触発されたカスタムオーソ では動作しません私は除いて/試してみると承認者のコードを変更し、例外のOPTIONメソッドのためのポリシーを生成し、まだオプションの方法は、私は気にしない401

を返します。物事を簡単にするなら、回避策。それは残念ながら、ブラウザのプリフライトに成功したステータスコードを予想し、APIゲートウェイでの401の応答のヘッダを設定することです:

おかげ

は私が提案ソリューションのいずれかを試してみました。

+0

あなたのコードで問題を再現する方法、ありますか? – georgexsh

+0

簡単なgit repoを提供してください。問題をデバッグすることができます –

+0

[私の答えは下記](https://stackoverflow.com/a/47122179/1252647)を試しましたか?私はあなたと同じ問題を抱えていた。 – dashmug

答えて

1

このAPI Gateway problem(これはAWSの人によって確認されています)は何ヶ月も存在していました。

幸いにも、彼らはGateway Responsesを使用して修正する方法を公開しました(2017年6月)。あなたのAPI Gatewayコンソールで


、あなたのAPIに移動してゲートウェイ応答

Gateway Responses

無断(401)を探し、以下のヘッダ(あなたはもちろん、あなたのドメインを使用することができます)を追加します。下に

Access-Control-Allow-Headers: '*' 
Access-Control-Allow-Origin: '*' 

参照イメージを:

Unauthorized

+0

は驚いたことに、うまくいきませんでした - ヘッダーのない401を得ました – Serge

+0

同じエラー401のコアーヘッダー – Serge

+0

はいくつかのフリークな許可ですか? – Serge

1
  • 401をAPIゲートウェイのOPTIONSメソッドから取得するのは、非常に珍しいことですが、 です。私は403OPTIONSのCORSヘッダーがありません。 がかなりありますが、一般的には401ではありません。オーソライザに問題があった場合、ではなく、POSTに401があると思います。

  • また、これを処理するために の承認者コードを変更していたことに言及しました。

あなたのAPI Gatewayの設定を見なければ、私は確かに言うことはできませんが、これらの二つの箇条書きには可能性を示唆しています。 のように聞こえますが、の方法(POSTまたは公開しようとしているものに加えて)にカスタムオーソライザを接続することができます。これは当てはまりません。例えば

あなたがAPIゲートウェイリソースのOPTIONS方法にカスタム(トークン型)承認者を添付して、AuthorizationヘッダーなしOPTIONS呼び出しを行う場合、あなたは401を取得します。

カスタムオーソライザは、明示的に公開しているメソッドにのみアタッチする必要があります。多くの場合、これはちょうどPOSTですが、PUT,DELETEなどのようなものを含めることができます。

これは役に立たない場合は、APIゲートウェイの設定で質問を更新し、失敗したOPTIONS呼び出しのリクエスト/応答ヘッダーを更新することがあります。

UPDATE

私がザッパを使用したHelloWorldフラスコアプリを展開し、そして私はあなたの問題を再現することができたと思います。カスタムオーソライザにリンクした青写真を使用しています。変更したのはpolicy.denyAllMethods()からpolicy.allowAllMethods()だけでした。

私が展開するときに、このようなものが作成されます。

APIG configuration without CORS

私はAuthorizationヘッダーが含まれていませんでした401OPTIONSからの呼び出しを取得することができました。

私はずっとCORSフレンドリーなものを作成した、私のzappa_settings"cors": trueを追加しました:

APIG with CORS

この構成は良く見えます。 401からOPTIONSまでは、Authorizationヘッダーが存在するかどうかに関係なく使用できません。

私のこのような"cors": true追加ルックスとzappa_settings

{ 
    "dev": { 
     "app_function": "hello.app", 
     "aws_region": "us-east-1", 
     "profile_name": null, 
     "project_name": "flask", 
     "runtime": "python3.6", 
     "s3_bucket": "zappa-xxxxxxxxx", 
     "cors": true 
    }, 
    "authorizer": { 
    "arn": "arn:aws:lambda:us-east-1:xxxxxxxxxxx:function:flask-authorizer", 
    "result_ttl": 0 
    } 
} 
+0

私は、現時点ではメソッド承認者によって提供されていません。 – Serge

+0

OPTIONSリソースを作成する 'enable cors'ボタンをプッシュしようとしました。 – Serge

+0

@Serge AWSコンソールでCORSを「手動で」有効にしようとするといくつかの問題がありました。私はあなたが試すことができるもので私の答えを更新しました。あなたの 'zappa_settings'は' 'cors ':true'を含んでいますか? –

関連する問題