2011-07-22 8 views
1

私はXMLを使用してWebアプリケーションのユーザーとデータを操作するためのAPIを作成しています。 POST XMLの場合、ユーザーなどを作成できます.2足のOAuthソリューションを使用して、APIリクエストを保護し、検証します。しかし、この問題はセキュリティの面ではありませんが、ユーザー名とパスワードを入力せずにユーザーがAPIリクエストからログインできるようにするためのものです。ユーザーログインのための安全な一時アクセストークンを作成する、これは十分ですか?

ステップ1、パートナーはXML APIを使用してユーザーを作成します。成功すると、システムは新しいID「/ user/99」を含むパスを返します。

UserID  int  FK 
AccountID int  FK 
Token  string 
Expiration date 
Used  bit 

ユーザーIDとアカウントIDに関連しています

ステップ2は、パートナーはユーザー/ログイン/ 99への要求が、これはここで、私のデータベースに新しい「ログイントークン」を作成します関連するプロパティがあります...

トークンは、ランダムに生成されたGUIDの最初の20文字で、ダッシュが削除され、すべての文字がToUpper()に設定されています。

有効期限はDateTime.Nowから30秒です。

Used = false 

ステップ3は、パートナーが(APIは異なるドメインにある)システムのURLの知識を持って、彼らは今、このようにそれにPOSTを行うことができます。

HTTP :この時点で、我々は確認して//otherdomain.webapp.com/core/login/ [ここguidを挿入]今

、「otherdomainの」部分は、アカウントごとに一意であることを行っている。

を見上げて提供されたGUIDに基づいたLoginTokenは、サブドメインと一致するアカウントを使用する場合、 (30秒以内に)有効期限切れではなく、 'Used'はfalseに設定され、ユーザーはログインし、Usedはtrueに設定され、ホームページまたは別のURLにクエリー文字列で提供されます。

基本的に、完全に登録されたアプリケーションと秘密鍵とOAuth用のすべてのジャズが必要です。ログインできるのはGUIDを要求するだけですが、1つの時間と30秒のウィンドウ内で動作します。最初のログインURLの知識はとても良いですか?

最終的に誰かが何とかGUIDとURLを30秒以内に知ることができれば、ログインにハイジャックすることができますが、そのチャンスは何ですか?

さらに、セキュリティを強化するために追加することはできますか?

答えて

1

(免責事項:私はセキュリティの専門家ではないです):

ます。http://otherdomain.webapp.com/core/

私が気づく当面の問題はこれですログイン/ [ここにGUIDを挿入]

設定に基づいて、GUIDトークンをユーザーに要求する必要があります。それは実質的に要求のパスワードです。 HTTP経由で送信すると、接続をスヌープできる人は誰でもトークンを持ち、セッションを乗っ取ることは難しくありません。これは絶対にプロセス全体にSSLを使用する必要があります。

それ以外では、トークンを使用する前にトークンを送信しているという問題があります。しかし、SSLを使えば、あなたの目的には十分に良いかもしれません。私は、通常の認証を処理できないプロトコルを扱うときに同様の方法を使用しました。ユーザーは保護されたチャネルを介して最初に接続し、「もう1つは転送したい」と言って、サーバーはトークン彼らはその要求に使用することができます。これは、セキュリティの低いシステムで十分に機能します。重要なデータを保護する場合は、プロダクションに行く前に専門家を招いて調べることをお勧めします。