0

フロントエンドの Ionic Mobile アプリ (基本的には Angular アプリ) からデータを取得する C# Azure Web API バックエンドがあります。

ユーザーの承認は Ionic のクラウド サービスを介して行われるため、FB、Twitter、基本 (ユーザー名/パスワード) を介してユーザーを登録するという面倒な作業を処理します。

私の質問は、バックエンド API からサービスを呼び出すときに、誰かがバックエンド データにアクセスするために内部 JavaScript コード内のハードコードされたユーザー名/パスワードを読み取らないようにするにはどうすればよいですか?

私はそれがかなり遠いことを知っていますが、リクエストが実際にアプリ (Android と iOS) から来ていることを API が知る方法はありますか?

4

2 に答える 2

2

エンド ユーザーが利用できる JavaScript から API を呼び出しているため、JavaScript とそれに含まれるすべてのロジック/資格情報にすべてのユーザーがアクセスできると想定できます。

これにはかなり安全な方法があり、FB/Twitter とその同類はそれを ( OAuthを使用して) 実装しています。基本的に、クレデンシャルを API に渡すと、トークンが生成され、クレデンシャルの代わりに API への後続の呼び出しに使用されます。

フォームをレンダリングするときに生成され、問題のフォームを送信するために一度だけ使用できるnonceを使用して、人々が「無許可の」リクエストをランダムに送信するのを避けることができます。その後、API 側で nonce の有効性を時間制限できます。残念ながら、これは絶対確実というわけではありませんが、これにより、あらゆる種類の「ブルート フォース」攻撃による被害を抑えることができます。

繰り返しになりますが、共有された「秘密」(リクエストの発信元を保証する)では、十分な意志を持つ人なら誰でもアプリからそれを抽出できると想定する必要があります。したがって、ここで実装する方法は 100% 確実です。おそらく最善の方法は、各デバイスのユーザーごとに共有シークレットを生成することです。

于 2016-09-12T20:39:40.927 に答える
1

簡単な答え: できません。
長い答え: クライアントの動作を検証できます (そして検証する必要があります) が、クライアント自体は検証できません。
たとえば、ポケモン ゴーを見てみましょう。数時間後にボットがプレイできるようになり、数週間後にはナイアンティックが機械学習ソフトウェア エンジニアを引き受け始めunknown6、ボットを停止するアルゴリズムを使用して API を暗号化しましたが、数日後には一生懸命働いたボットが再びオンラインになりました。
この宇宙のすべての安全な方法を使用できますが(高額な費用がかかります)、誰か(ソフトウェアエンジニアリングの十分な知識を持っている)が最後にクライアントをエミュレートしたい場合、私は彼の目的を達成します

于 2016-09-12T20:47:32.037 に答える