2017-01-06 13 views
2

私はAndroid App用の残りのAPIを作成しました。すべてのAPIはOAuth2(パスワードgrant_type)を使用して保護されています。信頼できるアプリケーション用の安全な残りのAPI

ユーザーはユーザー名&を提供し、サーバーは資格情報を確認し、access_tokenとrefresh_tokenを発行してAPIを呼び出すことができます。

ここでの問題は、APIが公開されており、誰にでも公開されていることです。マイアプリから生成されたコールだけが尊重されることを確認する方法を教えてください。

シナリオ: XYZはMy Appのユーザーであり、非常に優れた開発者です。彼は私のアプリとapiがどのようにやり取りしているかを知るのに十分興味がありました。今、彼は少し野心的(私は推測)で、自分のアンドロイドアプリを作成することに決め(私のアプリに似ています)、残りのAPIを使用します。この使用法に対してAPIを保護するにはどうすればよいですか?

私は他のいくつかの投稿を見ましたが、そのような使用から自分のAPIを保護するのに役立つものは何も見つかりませんでした。

+0

サーバーがあなたの言うとおりにoauth2を実装している場合、アプリケーションにはクライアントIDとクライアントシークレットが必要です。 – akash93

+0

私のAPIに基づいて他の人がアプリケーションを作成することを許可していません。私のAPPにはclientIdがあり、それはアプリケーションの検証に使用されますが、私のapkをソースコードに逆コンパイルするとclientIdが検出される可能性があります。今、誰かがclientIdを発見した場合、彼は私のアプリケーションが行うのと同じことをするためのアプリケーションを作成することができます。 – behinddwalls

+0

あなたのクライアントを解体できないようにすることは不可能ですが、これを参照してより難しいものにする方法はいくつかあります。https://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in -アンドロイド – akash93

答えて

2

あなたがしようとしていることは、少なくともエンジニアリングの観点からは、は不可能です。さまざまなツールを使用してアプリケーションに保存されている秘密を難読化することができます(たとえばProGuard)。最終的には、秘密を難読化するためにどのようなメカニズムを使用しても、それらを使用するデバイスにアクセスできる必要があります。リバースエンジニアリングクライアントを壊す可能性のある方法でAPIを頻繁に変更するなど、アプリケーションをリバースエンジニアリングするために必要な時間を増やすために、あるいは秘密を変更する必須のアップデートやそれらを難読化するメカニズム秘密。

しかし、あなたが何をしても、十分に意欲のあるユーザーは、あなたのアプリケーションで配布する秘密を得ることができます。

法的には、さらに多くのオプションがあります。法的にはは、適切なEULAを使用して許可されていないアプリケーションからAPIにアクセスすることができない場合があります。 Blizzard v BnetDを参照してください。サービスが提供するデータの著作権を所有している場合は、第三者がお客様の許可なく他の場所で複製することを防止したり、そのように請求したりすることはできません。その他の法的オプションもあります。あなたは弁護士に相談する必要があります。

しかし、なぜ気になるのですか?このパスを開始する前に、おそらく最初に他のアプリケーションがAPIにアクセスできないようにしようとしているのかと疑問視する必要があります。ユーザーが貴重なサービスを見つけたにもかかわらず、サービスにアクセスするためのサードパーティ製のアプリケーションをインストールすることを希望するクライアントに不満がある場合は、ユーザーにクライアントを使用させるのではなく、自分のクライアントの改善に集中する必要があります。彼らは明らかに好まない。

関連する問題