2012-07-16 20 views
10

私は、開発者がそれを使ってアプリケーションを作成できるように、REST APIとして公開したいWebベースのサービスを作成しています。開発者にユーザーアカウントを作成/管理し、APIを通じて認証できるようにしたい。これをどう扱う? OAuthなど何か?REST APIの認証を実装する方法は?

私はこのためにpython、flask、mongodbを使用しています。

答えて

10

OAuth 2(これはOAuth 1よりもはるかに優れています)を使用して、次のように解決しました。特に、我々はresource owner password credentialsフローを使用しています。権限のないユーザーが打ったとき

  • 最初のリソースは、rel=oauth2-tokenで、401は401のボディは、単一のリンクが含まれて返されます。私たちのRESTfulなサービスに統合する方法については、ここでの考え方です。 (リンクの信号はあなたのメディアタイプによって異なりますが、を使用していますが、Linkヘッダーのみを使用することもできます)。
  • ユーザーが認証すると、彼は最初のリソースに戻り、Authorizationヘッダーにベアラを送りますトークンはOAuth 2プロセスから返されました。この時点で、すべての通常のリンクを利用できる状態で200を返します。

アカウント作成は公開していませんが、その場合は、最初のリソースで権限のないユーザーが利用できる別のリンクを使用します。そのリンクはアプリケーションに固有のものなので、カスタムrelとなります。 rel=http://rels.myapi.com/users

良いRESTfulデザインは、このrelとのリンクが、例えば、を指していることを示します。 APIのコンシューマがそのエンドポイントに対してPOSTを実行し、そのエンドポイントに新しく作成されたユーザリソースを指し示すLocationヘッダを有する新しいユーザリソースを返す。 http://myapi.com/users/username。 (ユーザリソース自体はもちろん、特異ユーザリソースと複数ユーザコレクションリソースとを区別する別のrelである。)

関連する問題