flask-restfulとAuthlibを使ったAPIの作成方法【python】

Python

flask-restfulAuthlibを使ったAPIの作成方法をまとめました。
あまりまとまった情報がないように感じたので記録に残しておきます。

レポジトリはこちら

python3+が入っていれば「Installation」通りの手順で動くはずです。

ベストプラクティスというよりは備忘録です。
間違いや改善点があったら教えてください(._.)

機能

  • ユーザをPOSTかGETするだけの簡単なアプリです
  • ユーザ認証にはOAuth2のpassword_grantを使います
  • /usersをGETする際はアクセストークンに紐付いたユーザのみを返します

解説

個人的に詰まったところだけ説明を入れます。

@require_oauth: BearerTokenValidatorの登録

@require_oauth()というデコレータがgetメソッドについていますが、
こいつがトークンの有効・無効を判断してくれます。

このデコレータはrequire_oauth = ResourceProtector()で返ってきます。
(デコレータをあまりちゃんと理解していないので表現が曖昧ですが・・・)

しかし、そのままでは機能せず、実行時にNotImplementedErrorを返してきますので、
認証用のクラスを登録しなければいけません。

デフォルトの認証方法でよければこれで実装されますし、
BearerTokenValidatorのサブクラスを自分で定義してregisterすることもできます。

current_token

/usersにGETリクエストを送ると、
ヘッダーに載せたbearer tokenに紐付いたユーザを返します。

これをどうやってやるかというとすごく簡単で、
単にcurrent_token.userとするだけです。

PasswordGrant.authenticate_user

これもデフォルトではNotImplementedなので自分で定義する必要があります。

使用方法

クライアントアプリは無いですがcurlで簡単に試せます。

  1. ユーザを作成
  2. 作成したユーザをクライアントとして登録
  3. user1にトークンを発行
  4. トークンに紐付いたユーザをGET

(※もちろん、/clientsみたいなエンドポイントは普通は公開しないと思いますが・・・)

まとめ

OAuth2は複雑で私もよくわかっていないことが多いです。
参考にする際は自己責任でお願いします!

間違っていたら教えてください_(._.)_

 

[amazonjs asin=”B07D14DJFK” locale=”JP” title=”PythonでWebサービスを作る – Python3 + Flaskで作る本格的Webアプリケーション開発入門”]