私はこれについて頭をまっすぐにすることができません。私は現在、Android上でかなり大規模なアプリケーションを構築しています。私はセキュリティと認証に関していくつかの問題に遭遇しました...
シナリオ:
PHPとMySQLを実行しているサーバーにHTTP(後でSSLを実装する)を介して呼び出しを行うアプリケーションがあります。もちろん、既存のユーザーデータベースを使用したいので、別のDBへの移行は解決策ではありません。「Android経由でサーバーにユーザーを登録する」機能を作成することができました。私も正常にログインしましたが、ここから問題が始まります。
私が取り組んでいるAndroidアプリケーションのユーザーは、アプリケーションを介してサーバー上のものを追加、編集、削除、同期するため、状況はかなり複雑になります。私には少し複雑すぎるようです:)
問題:
サーバー側のログインから結果を取得し、JSONを介してサーバーからAndroidに渡すと、接続が切断され、サーバー側でログオンしていません(セッションが停止します)が、電話では接続が切断されます。サーバーとAndroidの両方で、再度ログオンせずにログオンを永続化するにはどうすればよいですか?そのため、Androidからサーバーへの後続の呼び出しは、認証されたままの同じユーザーで行われます。つまり、Spotifyアプリ(および他の多くのアプリ)のように、(ログアウトするまで)1回限りのログインが必要です。
私が物事を正しく理解していれば、SSLを正しく実装することで、最初にパスワードをハッシュする必要なしに、パスワードをクリアテキストでサーバーに送信することが可能になります。これは正しいです?
MIM攻撃によって、Androidからサーバーに送信する一意のIDが危険にさらされるという事実について考えるのをやめることはできません。私が最初に考えたのは、ログオンが成功した後、AndroidデバイスのUIDをサーバーの「キー」として使用することでした。ただし、そのキーが悪用されると、そのUIDに関連付けられているユーザーが危険にさらされます。私はAndroidでAccountManagerを見てきましたが、私の場合はかなりやり過ぎのようです。
誰かが例や少なくともガイドラインを提供できれば、私はとても感謝しています!
よろしくお願いします!
編集後に追加されたソリューション図
この図は、アプリケーションの最初の起動を示していることに注意してください。それ以降のスタートアップはログイン/登録フォームを表示しませんが、代わりにDUTを使用します。
//アレクサンダー