私はモバイルデバイスからアクセスされるAPIの作成を検討しています(私たちはモバイルアプリケーションも所有しており、サードパーティは関与していません)。
ログインフローの一部として、電子メール/パスワードの登録フローを使用するように指示されています。次に、5桁のPIN番号を作成して、ユーザーがアプリケーションを次に開くときにアプリケーションにアクセスできるようにします。
oAuthなどの利用可能な認証フローの大部分とは、ログインに追加のPIN認証を使用する兆候がないように思われるため、これは矛盾しているようです。
ただし、これを実行しているように見えるアプリケーションがたくさんあるので、独自のソリューションを展開しているのでしょうか。または、典型的なサービスを組み合わせてから、自分で何かをホストしますか?
API内でリクエストを正しく認証するために、一意のデバイスもピンに関連付けられていることを確認するという概念に取り組んでいます。
ポインターは歓迎しますが、モバイルアプリケーションではかなり一般的であると思うので、この種の認証のセキュリティの側面に関しては、貴重な詳細がほとんどないようです。
おかげで
私は質問を完全に理解していませんが、これを実装するための良い解決策を知りたいようです。
これを実装するには、一意のデバイスID(IMEIでもかまいませんが、OSに依存するIDでもかまいません)をフェッチし、これをPINと連結することをお勧めします。次に、PBKDF2を使用してこれからキーを導出します。
次に、ブルートフォースによって5桁のピンがクラックされるのを防ぐのに十分な回数の反復を選択しますが、認証に非常に長い時間はかかりません。
ここには2つの選択肢があります。 OAUTHトークンを生成されたキーで暗号化し、デバイスストレージ内に保存できます。または、モバイルOAUTHトークンが使用されています。それがモバイルかどうかを検知するにはOAUTHトークンが使用されている場合、モバイルログインを検出するためにログインフォームにフラグを設定できます。
管理者がこれを許可する場合、より良い解決策は、代わりに非対称キーのハードウェアベースのストレージを使用することです。 (boolean KeyInfo.IsInsideSecureHardware();)、サーバーは正しい秘密キーが安全なハードウェア内に存在することを確認します(ハードウェアキーを使用してアプリが署名するチャレンジを実行することにより)。これにより、アプリを特定のデバイスに厳密にバインドすることが可能になり、PIN認証をスキップできます。ユーザーのロック画面はアプリの誤用を防ぐのに十分であるためです(そして、 PIN必要に応じて、ロック画面を無効にすることで)を使用しないこともユーザーが選択できます。