48

認証を追加したい小さな API があります。API コンシューマー向けの API キーを生成できるようにしたいと考えています。その後、コンシューマはリクエスト リクエストにキーを含めることができます。

このようなことを行うFlaskライブラリはありますか? または、それを行う典型的な方法はありますか?私は検索を行いましたが、実際にこれに出くわしただけで、あまり詳しくはありません。図書館があれば探しています。

4

3 に答える 3

14

認証キーの場合、ランダムな値を作成し、その値をデータベースに保存します。random()このようなものには不十分なエントロピーを提供するので、を使用しますos.urandom()

あなたが投稿したリンクには、デコレータ関数で物事を処理する方法の非常に良い例があります。デコレータ関数で、リクエストにappkey値が設定されていることを確認し、データベースで有効であることを確認してから、関数を返します。appkeyが無効で、完了した場合raise AuthenticationError("Invalid appkey")

リンクした例は少し紛らわしいです。関数デコレータのチェーンを作成する方法のデモンストレーションが好きですか?より良い。

def checkAppKey(fn):
    def inner(*args, **kwargs): #appkey should be in kwargs
        try:
            AppKey.get(appkey)
        except KeyError:
            raise AuthenticationError("Invalid appkey")
            #Whatever other errors can raise up such as db inaccessible
        #We were able to access that API key, so pass onward.
        #If you know nothing else will use the appkey after this, you can unset it.
        return fn(*args, **kwargs)
    return inner
于 2013-03-15T18:04:05.343 に答える
2

APIキーを生成する「一般的な」方法は、UUIDを作成することです(通常、ユーザー情報のサブセットと多少ランダムな情報(現在の時刻など)のmd5ハッシュを作成します)。

ただし、すべてのAPIキーはUUIDである必要があります。md5によって作成された16進ハッシュはこの要件を満たしていますが、他の方法も確かにあります。

ユーザーのキーを作成したら、それをユーザー情報の一部としてデータベースに保存し、ユーザーのキー(通常はCookieに保存されている)が所有しているものと一致することを確認します。これの実際の仕組みは、リンク先のページに(ある程度)説明されています。

于 2013-03-15T18:03:26.800 に答える