2017-03-20 6 views
0

私はビジネスロジックとデータトランザクションのためにサーバー側のプロセスに接続する必要のあるモバイルアプリケーションを設計しています。私はSpringブートを使用してJavaでサーバー側のコードを書いています。私は、モバイルアプリケーションをサーバーに接続するためにRest APIを作成しようと考えています。モバイルアプリケーション用のAPIセキュリティ

モバイルアプリとサーバーの間の接続を保護する最善の方法については、現時点でいくつかの調査を行っています。私がしたいのは、モバイルアプリのユーザーが一度ログインすると、アプリを開いて、好きなだけアプリを使い、一定時間利用しないとタイムアウトすることができるようにすることです。

誰もがこれについて非常に簡単な読書をお勧めできますか?私はOAuth2を見てきましたが、それは別のアカウント(Google、GitHubなど)を使ってWebサービスにログインするためのようです。

ユーザー名とパスワードを残りのエンドポイントに渡して何らかのトークン(GUID?)を返すことで、https(SSL)を介してログインすることもできますか。その後、サーバがコールを確認できるように、クライアント(モバイルアプリ)が各後続コールでそのGUIDを渡すようにしますか?このシナリオではSSL経由ですべてを行う方がよいでしょうか?

私はかなりの研究をしましたが、私がしようとしているものと全く同じものを見つけることができないようです。

ホープ誰かが

おかげ

私は通常、JSONウェブトークン( https://jwt.io/)を作り上げているん何

答えて

1

を助け、そして私自身のセッションを処理することができます。

JWTは、サーバー側で秘密鍵を定義するだけでよいので、本当にいいです。クライアントが作成した文字列(たとえばヘッダー内)を渡すことができ、誰もあなたの秘密鍵を取得しない限り、トークンの作成時にプッシュするすべてのデータはあなたによって生成されたものと確信しています。 (最も強力な暗号化アルゴリズムを使用することを躊躇しないでください)

+0

ありがとう、これは私が探しているものです – user1387735

1

安全な接続のために、レベルTLS 1.2レベルでHTTPSを使用してください。次に、MITM攻撃を防ぐアプリ内のサーバー証明書を固定します。

ユーザー名とパスワードを渡すことは安全です。さらに必要な認証が必要な場合は、時間制限のトークンを返すことができます。

HTTPSでは、URLのアドレス部分以外はすべて暗号化されています。しかし、クエリ文字列に注意してください、それはサーバーのログに終わる可能性があります。

0

これらの返信をもう一度おねがいします。私は、server.ssl.key-storeパラメータを使ってhttpsで動作するように私のサービスを実装しています。それは問題なく動作しているようです。 keytool.exeを使用してトラストストアを作成し、そのトラストストアを使用してSpringBootアプリケーション(Tomcatが組み込まれている)を実行します。私はRESTエンドポイントにブラウザを開くことができます(httpではなくhttpsを使用します)。ブラウザは認証を要求し、ユーザの詳細を入力するとdbユーザと一致し、サーバからの応答を見ることができます。

古いブラウザを使用してRESTエンドポイントにアクセスしてユーザー名とパスワードを入力するだけであれば、サーバー側(Java)にトラストストアを持つのは何ですか?最終的には、このRESTエンドポイントはブラウザ経由でアクセスされることはありません。モバイルアプリをプログラムで使用してアクセスされるため、httpsでユーザー名とパスワードを使用してログインしていると想定しています。私は通信するためにクライアント側で何らかの証明書を持っていなければならないと思ったのですが、このようには動作しませんか?

ありがとうございました

関連する問題