私はRESTfulなAPIを備えたPylonsベースのWebアプリケーションを構築していますが、現在のところ、認証が不足しています。だから私はそれを実装するつもりで、すべてのトラブルやユーザのパスワードの保存に関する注意を避けるために、認証にOpenIDを使いたいと思います。これを行う最善の方法は何でしょうか?これらの2つは互換性がありますか? OpenIDを使用する既存のREST APIがインスピレーションを受けていますか?RESTful APIでOpenIDを使用するには?
答えて
私は今、オプションの研究に時間を費やしており、結果を要約したいと思います。 まずは、サービスとAPIコンシューマーの両方を開発し、制御します。コンシューマーは、現在のAPIと同じホストから提供され、ブラウザーで使用されるはずのFlashベースのアプリです。まだサードパーティのクライアントは見えません。そこで問題は2つの部分に分けることができます
、私はAPI経由でOpenID認証を行うのですか- 私はその後の要求に「認証済み」状態を維持しない方法
最初の部分では、OpenID認証にはほとんど常に対話的な手順が含まれています。認証プロセス中には、ユーザーがOpenIDプロバイダのWebページにアクセスし、サインインして「同意する」ボタンを押すステップがあります。したがって、APIはこれを透過的に処理することはできません。また、処理してはいけません(「OpenIDプロバイダとパスワードを教えてください」とは言いません)。クライアントが指示を出して指示に従わなければならないHTTPリンクを前後に渡すのが最善の方法です。
REST APIはステートレスである必要があり、「認証済み」状態の維持、各要求は、右、それを処理するために必要なすべての情報を含める必要がありますか?リクエストごとにOpenIDプロバイダに対して認証するのは意味がありません。だから、いくつかのセッションは、セッションが必要です。セッションキー(または「アクセストークン」またはユーザ名/パスワード)を通信するためのオプションの一部は以下のとおりです。
- HTTPS + BASIC認証(「認可:基本的な...」各リクエストのヘッダ)
- 署名要求Amazon-style(「認可:AWS ...」は、各リクエストのヘッダ)
- のOAuth:アクセストークンを取得するには、そのセッション鍵(「クッキーを格納する各要求
- クッキーに他のパラメータの束を含みます... "各要求のヘッダー)
- セッション情報を格納する署名付きのCookieクッキー自体の中にある
ただ今はAPIのコンシューマーが1つしかないので、私はクッキーが動作する可能性のある最も単純なものを選択しました。彼らはBeakerの助けを借りて、パイロンで使うのはとても簡単です。彼らはまた、Flashアプリケーションで "ただの仕事" - それはブラウザ内で実行されるので、ブラウザはFlashアプリケーションが作る要求に関連するCookieを含みます - アプリケーションはそれに関して全く変更する必要はありません。 RESTful authentication for web applications
ビーカーには、すべてのセッションデータがクッキー自体に含まれているcookie-only sessionsという素晴らしい機能があります。私はこれが得られるほど無国籍であると思います。サーバー上にセッションストアがありません。クッキーは署名され、オプションで暗号化され、クライアント側での改ざんを防ぎます。欠点は、セッションキー以上のデータを保存する必要があるため、Cookieが少し大きくなることです。私がセッションで本当に必要としなかったもの(OpenID認証の残り物)を削除することで、約200バイトまでのクッキーサイズが得られました。
OAuthは、APIの使用に適しています。 Pythonで使用されているOAuthの例を次に示します:oauth-python-twitter Leah Culverのpython-oauthライブラリは、PythonでのOAuthの正式な実装ですが、python-oauth2は最近流行している話題です。インスピレーションに関しては、django-pistonは、Django用のRESTful APIを作成するときにOAuthを使用して認証を行うことをサポートしていますが、その特定のトピックについてはドキュメントがうまくいきません。
APIを作成する場合は、OAuthプロトコルをチェックできます。 OpenIDを補完するものです。
- 1. WCFを使用してRESTful JSON APIを使用する
- 2. RESTful APIを使用したDerby
- 3. ノードfirebaseを使用したRESTful APIモデル
- 4. RESTful API - 使用するルートフォームを決定できません
- 5. Java RESTful APIでZapierを使用する方法
- 6. RESTful APIを文書化するには?
- 7. RESTful APIを作成するには?
- 8. Auth0をRESTful APIでどのように使用するのですか?
- 9. NativeScriptでWebサービス使用API RESTfulサービスに接続する方法は?
- 10. ウェブサイト認証にOpenIDを使用する
- 11. OpenRastaを使用したRESTful APIによる応答の問題
- 12. ECDiffieHellmanCngを.Net 3.5でOpenIdで使用するには?
- 13. Falcon RESTful APIを使用してURIを取得する方法
- 14. MVC Web APIを使用したRESTful APIのチュートリアルシリーズ
- 15. Azureを使用してRESTful APIからGETする
- 16. RESTful APIでパラメータにアプローチする方法
- 17. openIDサイトでMicrosoftアカウントを使用するには?
- 18. 私のウェブサイトでOpenID + OAuthを使用するには?
- 19. CORSでGoogleのOpenID接続プロバイダを使用するには?
- 20. Djangoプロジェクト/アプリケーション用のRESTful API
- 21. スタンドアロンアプリケーション用のRESTful APIコールバック
- 22. RESTful APIを保護する
- 23. CakePHPでRESTful APIを使用してデフォルトビューを表示しない
- 24. CakePHPのRESTfulなAPI私はRESTfulなAPIのためのCakePHP 2.xのを使用してい
- 25. test_clientを使用してFlask RESTful APIをユニットテストする場合に相当する
- 26. AWS RESTful API用のCognitoとAPIゲートウェイ
- 27. セットアップとティアダウン機能(Selenium)でRestful APIを使用
- 28. PyCharmでFlask-RESTfulを使用
- 29. フロントエンドレスアプリケーションでキュウリのRESTful APIをテストする
- 30. Redmine OpenIDの使用
APIは、現在、クライアント - サーバーのシナリオを対象としています。クライアントはFlashアプリ、サーバーはPylons webappです。現在のところ、サーバー間のものはありませんので、3足のものはまだ必要ありません。私の現在の問題は、パスワードの保存、パスワードリマインダの送信、パスワードのリセットなどを扱うことなく、システムに「認証されたユーザ」を導入する方法です。 OAuthがここで私をどのように助けているかはすぐには分かりません。なぜなら2-leggedバージョンではリクエストに署名する方法しか指定していないからです。 –
その場合、http://pylonshq.com/pasties/by_tag/openidにあるペーストの1つが役に立ちます。 –