2017-04-01 18 views
1

私はapisの認証システムを持っています。しかし、伝統的な方法とは異なり、これはメールとパスワードのないになります電子メールとパスワードのない認証。

フロントエンドはアンドロイドアプリです。最初に、アプリはローカルストレージに空のauth_tokenを持ちますが、アプリはの認証トークンをサーバーから要求し、mobile_number、device_id、およびgcm_idを送信します。

サーバは16 securerandom hex,を生成し、これを認証トークンとしてフロントエンドに送信します。

フロントエンドは、この認証トークンを使用してすべてのapisを呼び出す必要があります。

サーバユーザテーブルは次のようになります

id || mobile_number || device_id || gcm_id || auth_token

質問1:

は私がMOBILE_NUMBER、デバイスIDに基づいて、私の認証トークンを生成する必要がありますか、それが独立して生成することができますか?

質問2:

は、認証トークンが変更されるべきか?または、ユーザーに対して同じ認証トークンを永続的に使用できますか。認証のこの種の落とし穴は何

:それは変更する必要がある場合..あなたは

質問3を使用する戦略を指摘で私を案内してくださいすることができます。ユーザーに電子メールとパスワードを入力させるのではなく、パーソナライゼーション計算のためにユーザーを特定したいと思っています。

+0

したがって、ユーザーの電話が切れた場合、アカウントへのアクセスは永久に失われますか? – zerkms

+0

そう簡単です。 – gates

答えて

-1

質問3:落とし穴の1つは、どこに格納してもキーを暗号化しないことです。データベース(ユーザー表など)に保存する場合は、次のような方法で暗号化する必要があります。https://saasbook.blogspot.com/2016/08/encrypting-application-level-data-at.html

+0

あなたはauth_tokenを暗号化しなければならないと言っていますか? – gates

+0

通常はそうですが、あなたが間違って使用されることを心配していなければ、おそらくあなたのケースではないかもしれません。 – mrlindsey

+0

携帯電話番号と端末IDはどうですか?暗号化する必要がありますか? – gates

1

認証トークンはパスワードです。一般的に、クライアントやサーバが自動的に定期的に処理して、侵入したユーザデバイスやHeartbleedのような別のサーバの不具合など、潜在的なブルートフォース攻撃や資格情報漏洩のリスクを軽減するように設計する必要があります。あなたのトークンを頻繁に(おそらく2週間または1か月)有効期限切れにして、トークンが期限切れになったときにクライアントアプリケーションに再認証が必要になるか、トークンが更新される前に自動的に更新を要求します。

説明しているユーザー認証スキームは、ユーザーではなくデバイスのものです。そのような詳細を使って確実に別のユーザーを特定することはできませんが、メール+パスワードの方が優れているとは限りません。使い方が異なるだけです。 device_idでモバイルデバイスを識別し、電話番号を確認して所有者が変更されていないという確信を追加しています。私はGCMに精通していないので、どのようなプロパティが追加されているのか分かりません。他の当事者が偽装するためにはそれほど単純ではないデバイス認証の要素を追加するには、クライアントアプリケーションで最初のトークンを要求するために使用する独自の「知っていること」のパスワードを生成することをおすすめします。そのデバイス内部パスワードは、自動トークン発行の目的でサービスで認証するための秘密にすることができ、通常のリクエストごとの認証トークンよりも頻繁にローテーションすることができます。

クライアントの秘密鍵と認証トークンの両方について、パスワードと同じように、長くてランダムにする必要があります。認証トークンが自動ローテーションしている場合は、現実的なリスクをある程度導入しなくても、それをはるかに短くすることができます。私は実用的なオフラインハッシュブルートフォースの領域内に12文字があるので、短命のトークンが最小でなければならないとしても、少なくとも16のランダムなバイトがあると言うでしょう。そして、今日のもっともらしいものの間には、明日のクラッキング能力の向上が含まれます。

あなたが説明していることは、個人を認証するのではなく、単に個々のデバイスを認証することを覚えておくことが重要です。それはあなたのプロジェクトでやろうとしているように思えますが、その違いとその意味を理解することが重要です。

関連する問題