2009-08-24 11 views
0

私はアプリケーション開発者(A.K.A.私の友人)が自分のデータベースを照会できるようにするWebサービスを作成しています。セキュリティの制約として、私は各ユーザーを追跡できるようにしたいと考えています。私はFaceBookやGoogleマップのようなユニークなアプリIDを作成しています。ユニークなアプリケーションキー

開発者はユーザー名と電子メールアドレスを送信し、生成ボタンをクリックすると固有のキーが生成されます。つまり、ユーザー/電子メールがすでに存在する場合はデータベースを最初にチェックし、既にキーが生成されているかどうかを確認する必要があります(擬似ランダム生成保護)。

Webサービスを使用するには、ユーザーが何か入力する必要があります。

webservice.Authenticate(「ここではアプリのキーを」);

を認証します。前もって感謝します。

+0

私はGUID生成を検討していました。本当にユニークなのですか、それともpseduo-random numberですか? – ferronrsmith

+0

正確に何が助けを必要としますか?これは良い計画があるように思えます... –

+1

GUIDはほぼ真にユニークです。さて、あなたは衝突を得るかもしれませんが、これのチャンスは非常に小さいので、実際に考える価値はありません。もしあなたがクラッシュを心配しているなら、別のGuidを作り直してみてください。あなたのログデータをMicrosoftに書き込む)。 1台のサーバーから数百万人のGuidsを育成し、衝突することはありませんでした。 –

答えて

6

私が言うところでは、Guid.NewGuid()で十分であるはずです。

+0

ええ私はもう少し読んで、このメソッドが有用であることを発見しました。 whileループを実行して約20ミルを生成し、まだ衝突を起こさなかった – ferronrsmith

+1

@ferronrsmith:衝突の統計的可能性を打つ前に、おそらくこのループを数百年実行させる必要があります。 – LukeH

+0

LOLその程度です。笑い男のためにありがとう:) – ferronrsmith

0

一般的な認証は、アイデンティティ(名前)とシークレット(パスワード)から構成されます。秘密だけで構成された認証方式を設計しています。パスワード(guidの形式)。このアプローチの問題点(すなわち、パスワードとアイデンティティを分離しない)は、パスワードであるため、ユーザーがパスワードを変更してもパスワードを変更できないことです。

Maps APIのキーとそれに類するキーは何か他のもの:サービスプロバイダが署名したクレームです。たとえば、アプリがMaps APIを呼び出す場所の登録済みドメインです。 Generateキーは送信したドメインを受け入れ、そのドメイン名にサービスの秘密鍵を付けて署名し、publis署名を提示します。 APIにアクセスするには、登録し、利用規約に同意したことを示す署名(APIキー)を提示する必要があります。検証のもう1つの部分(アプリが実行されているドメイン、つまり「主張」)はJavaScriptによって自動的に検出されます。

私は決してMaps APIの専門家ではありませんが、私はいくつかの部分を持っているかもしれませんが、これは一般的に物事がどのように実装されているかです。私は多くの価値を提供していないため、難読化されたアプリケーションIDとしてguidを使用することを推奨します。漏れguidは誰でも使用でき、guidを使用してクレームを検証することはできません。あなたは何を保護しようとしているのか、あるいはOpenIdや何かのような確立された体系について考えてみてください。

+0

@Remus Rusanu人の名前、電子メール(と私たちが望むならば、ドメイン名)と共にデータベースに置かれて生成されるGUIDキー。ユーザーが情報を取得しようとすると、db内のデータ、つまりGUIDが検証されます。私はさらに暗号化を行うストアドプロシージャを書く予定です(それほど極端ではありません)。 dbに格納されている値はdomainとともに検査され、一致しない場合は結果セットがnullを返します。シンプル。それは何も進まず、私の周りのいたずらや、学校までやって来る友人たちが戻ってくる。とにかく先端のためのおかげで – ferronrsmith

1

塩、ユーザー名、電子メールアドレスから文字列を作成します。その後、その文字列からハッシュ(MD5またはSHA1)を作成します。塩は単にユーザーIDにすることも、ユーザーに知られていない限り他のものにすることもできます。

GUIDは問題ありませんが、この状況ではおそらく過剰です。あなたは何十億というユーザーを抱えていますか?あなたはおそらく1から1,000,000の間の乱数を得ることができます。次にxが3〜6の間で失敗したx回の試行後にログインを無効にしてください。

+1

億のユーザー、LOL。ほとんどそれは約200000 – ferronrsmith

2

GUIDソリューションを使用する場合は、データベースを照会することで常に一意であることを確認できます。一意でない場合は、新しいものを生成してください。

+0

ちょうど私がやったことです、ありがとう:) – ferronrsmith

1

アプリケーションのサイズとユーザー数に応じて、Guidを処理する方法がわからない限り、Guidが最適ではない場合があります。ほとんどの場合、これらは文字列として使用されていますが、ストレージ要件が増え、比較ルーチンが遅くなります。マッチするguidの文字列比較では、すべて36文字をスキャンする必要があります。ちょうど16進形式で格納されているデータのためのウェイ・オーバーキル。その良いGUIDを整数の配列として保存する...同時に検索を減らしながら、ストレージ要件を削減します。

数千のレコードしかない場合は、文字列としてのguidはおそらくそれほど重要ではないでしょう。しかし、規模のプログラミングとその規模が大きい場合は、適切な調整を行うことで、後で実行する際の苦労が軽減されます。

テーブルでジョインを行っている場合は、GUIDではなく、結合を行うために整数のアイデンティティを使用します(前述の理由と同じです)。

+0

ほとんど私は約200000持っています。私はそれらを整数の配列として保存することを考えていましたが、一体何がありますか。それはそれほどの記録ではなく、必要ならばいつもルーティンを変えることができる – ferronrsmith

関連する問題