2009-09-16 5 views
22

モバイルデバイス、winformsアプリケーション、iphone、blackberryなどのさまざまなプラットフォームから呼び出せるWebサービスアーキテクチャを作成したいと思っています。だから、WCFやwsHttpバインディングのようなものはおそらくこれを殺し、互換性のためにbasicHttpバインディングにダウングレードする必要があります。Webサービスコールを認証するTOKENシステムを作成する最も良い方法は?

これは、最初のログイン(認証)時にトークンを生成し、その後のすべての呼び出しでこの認証を検証し、そのメソッドを実行できるようにするシステムが必要です。

誰でもこれについてのヒントや提案がありますか? 1)トークンを生成し、安全なトークンに何が含まれていますか? 2)トークンはどれくらい時間がかかるのですか?ユーザーによっては、数時間アプリケーションを使用して、コンピュータをスリープ状態にすることもあります。

ありがとうございました。

+1

私の質問は、このトークンを前後に、またすべての呼び出しで、認証方法をあまり変えずに転送する最も良い方法です。サーバーがこのトークン(シリアル化されたクラス)を生成すると、後続のすべての呼び出しにそれを接続する最も良い方法は何ですか?メソッドへのパラメータとして、またはヘッダーなどのようにアタッチすると、すべてのメソッド(サービスコントラクト)にトランスペアレントに表示されます – Neal

答えて

15

最初の認証時にサーバーから与えられたトークンを1つだけ使用している場合は、そのトークンが傍受された場合はすべての要求に使用できます。あなたの唯一の防御は有効期限です。

それ以外は、実装オプションによって異なります。

より安全なシステムは、各リクエストにタイムスタンプ(および場合によってはノンス)を追加し、署名し、各リクエストにそれを含めることです。クライアントが認証資格情報を処理し、署名の実装を認識し、各要求に署名する必要があります。

OpenIDで行うこともできますが、いくつかのトークンを渡して、さらに多くのことが必要なときに再認証することもできます(これはOAuthで行うことができます)。クライアントが資格情報を保存できる場合、これらはユーザーには見えない可能性があります。これらはより複雑で、一部の相互作用にはSSLなどの暗号化されたトランスポート、HTTPリダイレクトを話し、クッキーやその他の保存された状態を処理できるクライアントが必要です。クライアントは署名方法を知る必要はありませんが、SSLを使用できる場合は、まず複雑さを必要としないでしょう。

クライアントに依存している必要がない場合は、おそらくリクエストに署名する必要があります。

署名実装、サンプル、およびライブラリについては、Amazon Web Services、OpenID、またはOAuthを参照してください。

トークンの有効期限については、必要に応じて異なります。長いトークンライフは、ウィンドウリプレイ攻撃を増加させます。ノンスは、トークンを1回使用しますが、サーバー上でより多くの状態を必要とします。

3

OAuthをご確認ください。これはAPI認証の標準です。既存の実装をサービスにプラグインするだけで済みます。

+0

OAuthプロトコルを使用すると、パラメータを自由に設定できます。いくつかのサービスプロバイダを見て、彼らがOAuthを使って何をしたかを調べることをお勧めします。 http://wiki.oauth.net/ServiceProviders –

関連する問題