18

私は自分のRESTfulAPIを保護する方法を探していました。これは単純に見えましたが、それほど単純ではないようです。まず、PlayFrameworkサーバーに接続するiOSアプリを作成しています。これは、Google、Facebook、Twitter、LinkedInとは何の関係もありません(私が知っている衝撃的なことです)。ああ、そして私の現在の計画では、カスタムアプリが私のAPIを使用する必要はなく、当面は私のアプリだけです。

基本認証

単純に見えたのは、Cookieセッションを管理する/authメソッドの基本的なユーザー/パスでした。それは、単純すぎるか弱いとうめき声を上げるかもしれませんが、ほとんどの場合、IDをセッションキーに移動してすぐに確認しました。私の初期設定は毎日セッションを期限切れにすることでしたが、それはiOSアプリが毎日ログインを強制することにつながり、煩わしいことを証明しました。

OAuth

iOSボードに質問を投稿し、OAuthへの率直な指示を受けました。私のOAuthの調査は始まりましたが、それは非常に複雑で、サーバー側の例はないようです...それがどれほど苛立たしいことかについて不満を言う人はたくさんいます。すべてのクライアントの例は、Google、Facebook、Twitter、LinkedInへの接続を示しています。ああジョイ!

OAuth1とOAuth2についてのEranHammerの怒りを見た後、続行するのは無益であるように見え、彼のOZのアイデア(本当にきれいに見えます)はnode.jsの初期段階にすぎません。

質問

それで、幅広いStackOverflowコミュニティへの私の質問は... REST APIを保護するために何をしますか?

4

4 に答える 4

7

アマゾンウェブサービスやWindowsAzureなどの最大のプレーヤーが使用するアプローチを検討することをお勧めします-HMAC。実装は快適ではありませんが、ご覧のとおり、信頼できる手法です。

一般的な考え方は、iOSでリクエストのパーツ(ヘッダーなど)に秘密鍵で署名し、Playアプリで再計算して、リクエストが本物であり、操作されていないことを確認することです。それが失敗しないのであれば、それは有効な秘密鍵を使用している誰かから送信されたものであると(ほぼ)確信できます。

Windowsのドキュメントを調べて 、概念を理解してください(一般的なタスクでは、署名に使用する要素の数を減らすことができると思います)。

プロセス全体をさらに詳しく説明している他の興味深い投稿(AWS認証に基づく)もあります。

編集

もちろん、iOSでの認証とAPIリクエストの保護は別のものであることに注意する必要があります。ただし、15分ごとにセッションを期限切れにしても、誰かがそれを傍受して送信できるかどうかはわかりません。外部からの偽のリクエスト。すべてのリクエストに署名することで、リスクを最小限に抑えることができます。

一方、リクエストに署名するための明確なルールを準備し、短いドキュメント(自分でもお勧めします)を作成する場合は、他の開発者に配信して、(ほぼ)SHA256をサポートするすべてのプラットフォーム。これにより、サードパーティのアプリからAPIを使用できるようになります。将来公開する場合は。

于 2012-12-30T22:51:23.290 に答える
0

簡単なことをして、HTTPS経由でカスタムヘッダーで認証コード/パスワードを送信します。

于 2012-12-31T08:30:29.890 に答える
0

Play FrameworkはJavaであるため、 ApacheShiroを使用できます

私はまだそれを使用していません..(私は使用する予定ですが)それで、それが最良の選択肢であるかどうかはわかりません。

于 2012-12-30T22:59:18.737 に答える
0

では、基本認証アプローチの唯一の問題は、ユーザーが毎日ログインする必要があるということでしたか?ユーザーにユーザー名/パスワードをデバイスに保存するオプションを提供してみませんか?そうすれば、彼はセキュリティと利便性のどちらかを選択できます。

于 2012-12-31T09:52:38.510 に答える