1

WindowsPhoneとAndroid用のアプリを作成しています。ですから、今は両方が使用できるWebAPIを構築していますが、他のアプリケーション以外では使用できないように保護したいと考えています。どうすればいいですか?他の誰も私のアプリがこれらのAPIにアクセスすることはありません。

OAuthを実装したくありません。

私が考えている2つのシナリオがあります。

最初に(ユーザー名とハッシュ化されたパスワードをクライアントに保存します):

  • https / sslを介した基本認証、それだけです。

2番目(アクセストークンをクライアントに保存します):

  • アクセストークンを受信するためのhttps/sslを介した基本認証。
  • アクセストークンを取得するために、ユーザーは、クライアントとサーバーの両方がclientsecretを認識していることを確認するトークンをrequestokenに要求します。
  • APIを呼び出すたびに、アクセスを確認するためにアクセストークンを送信する必要があります

2番目のアプローチで見た問題は、サーバーがアクセストークンをクライアントに送信することです。これを取得する場所があれば、ユーザーのアクセス権があります。

それは現実の世界でどのように行われていますか?

4

1 に答える 1

1

Firstのわずかな変更を使用できます:

  • ユーザー名とパスワードをクライアントに保存する
  • httpsを介した基本認証

パスワードハッシュをクライアントに保存し、ハッシュを送信してデータベース内のハッシュと比較することは、ハッシュがパスワードになるため、プレーンテキストのパスワードをデータベースに保存することと同じです。したがって、アプリは、他の人間のユーザーと同じように、ユーザー名とパスワードで認証する必要があります。

しかし、2番目のアプローチに対するあなたの懸念も当てはまります。誰かがメッセージを傍受した場合、その人はあなたの資格情報を持っています。

より安全なソリューションはHMAC認証です(現在は「現実の世界」について話しています)。

  • ユーザーはサーバーとクライアントに保存されている秘密鍵を持っています
  • 各リクエストは正規化されます(リクエストメソッド、URI、パラメーター、タイムスタンプを含む個別の文字列に変換されます)
  • 正規化されたリクエストは秘密鍵を使用してHMACでハッシュされ、ハッシュとユーザーIDはHTTPAuthorizationヘッダーで渡されます
  • サーバーでは、同じアルゴリズム(HTTPDateヘッダーからのタイムスタンプを使用)を使用してハッシュが生成され、送信されたハッシュと比較されます。
  • 結果が等しい場合、リクエストは認証されます

例として、Amazon S3 REST APIがあります。リンクされたドキュメントは、独自のAPIに実装する方法の良い例でもあります。

于 2013-02-12T18:04:34.063 に答える