web-dev-qa-db-ja.com

AWS Cognito as Djangoウェブサイトの認証バックエンド

Cognitoを読んだところ、ローカルのDjango= adminデータベースの代わりに使用してWebサイトのユーザーを認証できることがわかりました。ただし、基本的な " Cognitoを通過するログイン画面を備えた「Hello、World」アプリ。HelloWorld Djangoの作成方法を段階的に説明する記事を誰かが投稿できれば、非常にありがたい= appとCognitoユーザープール、およびDjangoのデフォルト認証をAWS Cognitoの呼び出しに置き換える方法。

特に、Cognito APIの呼び出しを設定してユーザーを認証するために必要なCognito管理サイトから情報を収集する方法を知る必要があります。

考慮すべき2つのケースがあります:アプリへのアプリユーザーログイン、およびDjangoサイトの管理URL。両方のケースでCognitoを使用することを想定しています。管理URLがより弱いログインテクノロジーを使用している潜在的なホール。

AWSフォーラムおよびStackExchangeでの現在の回答は次のいずれかです:

(1)ウェブサイトの認証にCognitoを使用するのは時間の無駄です。AWSリソースにアクセスするためだけです

(2)時間の無駄ではありません。私はあきらめようとしています。サンプルのCognitoユーザープールとユーザーグループを作成し、このユースケースの適切な例についてWebを精査しました。 (見つからないか、私は書いていません。)

(3) https://github.com/capless/warranthttps://github.com/metametricsinc/Django-warrant はawsフォーラムからの2つの可能な解決策です。

29
Lars Ericson

これを読んでいるなら、おそらく「aws cognito Django」xDをグーグルで検索したことでしょう。

私はこのことを機能させるためにしたことを共有したいだけです:

  • Django-Warrant 。素晴らしいAWS Cognitoラッパーパッケージ。
  • 現在のユーザーモデル構造を必ず理解してください。カスタムユーザーモデルを使用する場合は、COGNITO_ATTR_MAPPING設定を使用してマップすることを忘れないでください。
  • 認証を変更して、サードパーティの接続をサポートします。クライアントからCognitoトークンを取得したら、oAuth/JWT/Sessionを使用して独自のトークンに変換します。

  • 再考ログイン/登録プロセス。別の登録が必要ですか? Django-warrantパッケージはそれをサポートしています...

結局のところ、これは高速認証のための[〜#〜] great [〜#〜]ソリューションです。

23
Gal Silberman

受け入れられた答えに追加するには、Django 2.0でDjango-warrantを使用するために取る必要があるとわかった、シンプルだが非常に重要な追加ステップがあります。

ルートパッケージのbackend.pyの条件は、以下から変更する必要があります。

    if Django_VERSION[1] > 10

に:

    if Django_VERSION[1] > 10 or Django_VERSION[0] > 1:

ZappaおよびAWS LambdaでDjango-warrantを使用する:

私が取り組んでいるプロジェクトでは、Zappaを使用して、DjangoアプリをAWS Lambdaにサーバーレスで展開できます。上記のコードは、ローカルテスト中にDjangoの保証を修正しましたが、 Lambda環境では、Django-warrantのサポートパッケージのいくつかに起因する別の重要な問題がありました-主にpython-jose-pycryptodomeに関連し、Django-warrantは認証プロセス中に使用します。このエラーは、pycryptodomeがWindows(私が開発中)とLinux(Lambda環境)のランタイムでCryptoパッケージで異なるファイルを使用できることを期待しているために発生したようです。この問題は、Linuxバージョンのpycryptodomeをダウンロードし、そのCryptoパッケージをWindowsバージョンのCryptoパッケージとマージすることにより実現しました。

TLDR:Django-warrantをAWS Lambdaで使用し、Windowsマシンで開発する場合は、Linuxバージョンのpycryptodomeをダウンロードし、そのCryptoパッケージをWindowsバージョンのCryptoパッケージと必ずマージしてください。

注:上記を達成するために使用したpycryptodomeおよびpython-jose(python-jose-cryptodomeではありません)のバージョンは、それぞれ3.7.2および3.0.1でした。

2
Isaac Doidge