9

皆さん、これはかなり頻繁に議論されているようですが、RESTfulサービスで認証を行うことについて簡単で骨の折れる質問をしたいと思います。シナリオは次のとおりです。

  • アプリケーションの登録ユーザーを収容するシステムがあります。システムは、これらのユーザーにアクセスするためのRESTfulAPIを公開します。
  • ログインフォームを備えたフロントエンドアプリケーションがあります。アプリケーションは、内部または外部のいずれかになります。
  • フロントエンドアプリケーションは、ユーザーシステムのデータを使用してユーザーを認証する必要があります。

ここで問題となるのは、クレデンシャル(ユーザー名/パスワード)がクライアントアプリケーションに入力されているユーザーを、ユーザーシステムのデータに対して安全でパフォーマンスの高いものとして認証する方法です。この質問のために、クライアントアプリケーションがある種のイントラネットの内部にあるが、アプリケーションは同じマシン上に存在せず、サービスを介してのみ通信できると仮定します。

アプリケーションを「ハイパーメディア駆動型」にするという考えは理解していますが、フィルタリング/検索サービスを提供できるはずです。たとえば、次のようなリソースとAPIについて考えてみます。

  • http://example.com/users
    • GET-すべてのユーザーを取得します(ページング、ハイパーメディア駆動型)
    • POST-新しいユーザーを作成します
    • PUT/DELETEはサポートされていません
  • http://example.com/users/ [id]
    • GET-id={id}のユーザーの完全な表現を返します
    • PUT-ユーザーを更新し、事前定義されたメディアタイプを取り込みます
    • DELETE-ユーザーを削除します(適切な権限が必要です)
    • POSTはサポートされていません

上記に基づいて、私のアイデアは、ユーザーリストでクライアントアプリケーションをGETし、ユーザー名でフィルタリングすることです。サービスはハッシュされたパスワードとソルトをクライアントに返し、クライアントは認証を実行します。

考え?

4

5 に答える 5

6

私があなたの質問を正しく理解していれば、認証を処理する汎用サービスを実装して、さまざまなアプリケーションで再利用できるようにしようとしています。

まさにこの問題ドメイン向けに構築されたOAuthをご覧になることをお勧めします。

于 2010-01-08T15:36:10.637 に答える
4

ストームパス

開発者向けのユーザー ログイン管理 API とサービスの提供を専門とするStormpath社。REST JSONアプローチを使用します。

サービスとしての認証というこの新しい分野に手を出しているように見える企業は他にもいくつかありますが、私が知っている限り、それに専念しているのは Stormpath だけです。

于 2014-02-01T23:24:47.743 に答える
4

ユーザー名とソルトバックを渡すことは不要であり、実際のセキュリティリスクです.

おそらく、次のアプローチを検討できます。

クライアントがユーザー名とパスワードを基本認証を介してサーバーに渡すようにする

サーバーは、ソルトとともにユーザー名の暗号化されたパスワードを取得します

サーバーは、アルゴリズムを支援するソルトを使用して、何らかの暗号化方法を使用して指定されたパスワードを暗号化します (Ruby コードは次のとおりです)。

def User.authenticate(login, password)
    ok = false

    user = User.find_by_login(login)

    if user
        #
        #   user contains the salt, it isn't passed from the client
        #  
        expected_password = hash_password(password, user.salt)

        ok = (user.password == expected_password)
    end

    return ok
end

この種のアプローチを使用する場所は複数ありますが、私は Rack で行うのが好きです。

最後のポイントは、HTTPS 接続ですべてを実行することです。

于 2010-01-14T21:17:06.653 に答える
3

まず、サービスに侵入するクライアントを作成するのは簡単になるため、クライアントに認証を実行させたくありません。

代わりに、 HTTP BasicHTTP Digestなどの認証メカニズムを使用してください。

Java を使用している場合、Restletフレームワークは Guards と呼ばれるインターセプターを提供し、これらおよびその他のメカニズムをサポートすることに注意してください。レストレットを強くお勧めします。

于 2010-01-07T06:06:10.810 に答える
0

Mozilla ペルソナ

この質問が投稿されて以来、Mozilla Foundation ( Firefoxブラウザーのメーカー) は単純なユーザー認証の問題に取り組んできました。彼らのソリューションはMozilla Persona、「Web 用のサインイン システム」です。ユーザーと開発者にとって使いやすいように設計されています。ユーザーの ID は電子メール アドレスです。ウィキペディアの記事を参照してください。

アップデート

Mozilla は基本的に Persona の作業を断念しましたが、プロジェクトを完全に終わらせたわけではありません。

于 2014-02-01T23:21:30.463 に答える