質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

4009閲覧

flaskでのbasic認証が通らない

dampo_t

総合スコア25

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2016/10/13 16:23

編集2016/10/16 14:38

flaskフレームワークにてBasic認証をかけたのですが、そのBasic認証が通りません

  • ローカル(macOS)で実装をした時は問題なく動いたのですが、aws ec2(Ubuntu 14.04)上で動かすと、パスワードが通らなくなってしまいます。

参考にしたサイト

main.py

python

1from flask import Flask 2from decorator import requires_auth 3app = Flask(__name__) 4 5@app.route("/") 6@requires_auth 7def index(): 8 return "Hello Index!" 9 10@app.route("/hello") 11def hello(): 12 return "Hello World!" 13 14if __name__ == "__main__": 15 app.run()
decorator.py

python

1from functools import wraps 2from flask import request, Response 3 4def check_auth(username, password): 5 """This function is called to check if a username / 6 password combination is valid. 7 """ 8 return username == 'admin' and password == 'secret' 9 10def authenticate(): 11 """Sends a 401 response that enables basic auth""" 12 return Response( 13 'Could not verify your access level for that URL.\n' 14 'You have to login with proper credentials', 401, 15 {'WWW-Authenticate': 'Basic realm="Login Required"'}) 16 17def requires_auth(f): 18 @wraps(f) 19 def decorated(*args, **kwargs): 20 auth = request.authorization 21 if not auth or not check_auth(auth.username, auth.password): 22 return authenticate() 23 return f(*args, **kwargs) 24 return decorated
  • テストのために、全く同じコードで実行したのですが、それでも認証が通らないといった状況です。

実行環境

  • Ubuntu 14.04
  • aws ec2
  • Google chrome

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nagaetty

2016/10/16 03:01

ec側では、ポート 80は解放されていますか?
dampo_t

2016/10/16 11:03

解放されています。最初のページ自体は表示されます。
guest

回答2

0

ベストアンサー

google先生に尋ねましたところ、下記のサイトに行きつきました。
http://stackoverflow.com/questions/31561085/simple-authentication-in-flask-not-working-under-apache

apacheの定義に下記が必要でした。
WSGIPassAuthorization on

apache側で処理を奪うので、応答をpythonまで返していなかったようです。

投稿2016/10/17 04:05

nagaetty

総合スコア1106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dampo_t

2016/10/17 05:53

回答ありがとうございます。 無事解決いたしました! apacheを使っているということを質問で書いていなかったりと、不十分な質問内容に付き合ってくださり、ありがとうございました。
guest

0

環境回りに不備があるのか?と思っておりましたが、ソースコードが怪しそうです。

main.pyを下記のようにして、お試しください。

訂正

python

1 from flask import Flask 2 from decorator import requires_auth 3 app = Flask(__name__) 4 5 @app.route("/") 6 @requires_auth 7 def index(): 8 return "Hello Index!" 9 10 @app.route("/hello") 11 def hello(): 12 return "Hello World!" 13 14 if __name__ == "__main__": 15 app.run(host='0.0.0.0')

接続確認

python main.py

で起動するとデフォルトは5000ポートで待ち状態となります。
ですので、AWSのサーバのIPアドレスを指定して
http://xxx.xxx.xx.xxx:5000/
でアクセスしてみてください。

投稿2016/10/16 13:30

編集2016/10/16 13:41
nagaetty

総合スコア1106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dampo_t

2016/10/16 14:18 編集

ありがとうございます。 回答にあったように試してみたのですが、なかなかうまくいかずといった状態です。 >>AWSのサーバのIPアドレスを指定して http://xxx.xxx.xx.xxx:5000/ でアクセス.. こちらなのですが、普段使っていない接続方法だったので、新たに試してみましたが、こちらのやり方がまずいのか繋がらずでした。 ちなみに普段flaskをbasic認証を行わないで使っている時は上記のようなバグは発生しませんでした。 しかしおっしゃるようにバグを見る限りあまりソースコードのミスではなさそうなんですよね。flaskドキュメントからコピペしているだけですし。。 普段同じようにflaskアプリケーションの構築を行う際は以下のサイトを参考にapache2を使った方法で行っているのですがいかがでしょうか? http://www.datasciencebytes.com/bytes/2015/02/24/running-a-flask-app-on-aws-ec2/
nagaetty

2016/10/16 14:26

添付されたソースには、下記の行が不足いていましたので確認ください。 from decorator import requires_auth 下記の行は戻してください。 app.run()
dampo_t

2016/10/16 14:37

>>添付されたソースには、下記の行が不足いていましたので確認ください。 申し訳ありません。ソースの方ではご指摘いただいた行はすでに追加させていただいていました。質問の方のコードの修正できていなくて申し訳ありませんでした。 >>下記の行は戻してください。 戻させていただきました。 残念ながら依然としてバグは残ってしまっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問