Subscribed unsubscribe Subscribe Subscribe

Google App Engine でBasic認証を実装

探したんだけどサンプルが見つからなかった。
自分で作ってみたけどこんなカンジでいいのかな?

# -*- coding: utf-8 -*-

from base64 import b64decode
from google.appengine.ext import webapp

class BasicAuthentication(webapp.RequestHandler):
    def get(self):
        # Basic認証
        if self.__basicAuth():
            self.response.out.write('認証されたよ!')
        else:
            code = 401
            self.error(code)
            self.response.out.write(self.response.http_status_message(code))
            
    def __basicAuth(self):
        # ヘッダの確認
        auth_header = self.request.headers.get('Authorization')
        if auth_header:
            # 文字列のチェック
            auth = auth_header.split(' ')
            if len(auth) != 2 or auth[0] != 'Basic':
                return False
            info = b64decode(auth[1]).split(':')
            if len(info) != 2:
                return False
            # ユーザー名とパスワードの照合
            if info[0] == 'username' and info[1] == 'password':
                return True

        # 認証の要求
        self.response.set_status(401)
        self.response.headers['WWW-Authenticate'] = 'Basic realm="BasicTest"'

base64デコードできる文字列かどうかも確認した方がいいかな…

追記

google app engine basic認証」とかでググっていたのがいけなかった。
django basic認証」でググればいくつか出てきた。
BASIC 認証 - Twisted Mind
そうか、try-exceptの例外処理を使えばもっとキレイに書けたんだー。