HDEラボの桜井です。
今日2/9はなんと夏目漱石の誕生日(1867年)なんですねぇ。
今回は、Twistedを使ったWebサーバにBasic認証機能を追加してみます。
まずは、必要なパッケージをimportします。
次に、server.Siteクラスを継承したBasic認証を可能にするクラスを作成します。
今日2/9はなんと夏目漱石の誕生日(1867年)なんですねぇ。
今回は、Twistedを使ったWebサーバにBasic認証機能を追加してみます。
まずは、必要なパッケージをimportします。
from twisted.application import internet, service from twisted.web import error, server, twcgi, static, resource from twisted.cred import checkers, credentials import crypt import copy
次に、server.Siteクラスを継承したBasic認証を可能にするクラスを作成します。
class BasicAuthSite(server.Site):
# パスワードファイルをセットします
def setPasswordFile(self, file):
self.passwordFile = file
# server.Site.getResourceFor をオーバーライドします
# superの使い方がよくわからなかったのでこんなコードになってます、すいません
def getResourceFor(self, request):
# ユーザ名とパスワードが違ったら、認証ダイアログをあげる
if self.authorize(request.getUser(), request.getPassword()) == False:
request.setResponseCode(401, "Authorization Required")
request.setHeader('WWW-Authenticate', 'Basic realm="Authorization Required"')
request.site = self
request.sitepath = copy.copy(request.prepath)
return resource.getChildForRequest(self.resource, request)
# 認証を行うメソッド
def authorize(self, user, password):
# データベースファイル(Apacheのhtpasswdコマンドで作成)を開く
file = checkers.FilePasswordDB(self.passwordFile)
# 認証
try:
# ファイルよりユーザを取得
data = file.getUser(user)
# ユーザ名とパスワードをチェックするクラスのインスタンスを生成
check = credentials.UsernameHashedPassword(data[0], data[1])
# 入力されたパスワードが正しいかどうかチェックしてboolean型で返す
return check.checkPassword(crypt.crypt(password, data[1]))
# 該当するユーザがいない場合はFalse
except KeyError:
return False
Continue reading TwistedでCGIの動くWebサーバを書いてみる、にBasic認証機能を追加してみる.



