独自のロイヤルユーザベースを持つクロスプラットフォームWebアプリケーション(Web +モバイル)を開始することに興味があります(任意の良いアプリケーションとして)。クロスプラットフォームアプリケーション:Android +カスタムRESTバックエンド(Yii2)+ログイン用サードパーティSSOプロバイダ(Google+)
バックエンドはYii2フレームワーク(PHP)によって強化され、ユーザーによる認証(oAuth2アクセストークン)を必要とするいくつかのRESTエンドポイントを公開します。ユーザーは専用の「ログイン」APIエンドポイントを呼び出すことでアクセストークンを取得することができます。これは簡単な部分であり、この質問には関係しません。
私のアプリケーションのWebバージョンでは、外部のSSO(たとえばGoogle+)を使用してログインすることもできます。これにより、内部ユーザーデータベースに自動的に作成されます(外部のGoogle IDにも接続されます。同じユーザが同じ「内部」ユーザを自動的にログインさせる)。
これはweb + REST APIのペアでうまくいきますが、Androidを絵にすると複雑になり始めます。
Androidアプリケーションは、標準のAndroid SDKを使用してGoogle+プロフィールを通じてログインするオプションをユーザーに提供することができます。この方法でGoogleのIDを取得できます。しかし、問題は、内部データベースのユーザー名とパスワードをユーザーに要求せずに、REST APIによって発行されたアクセストークンに対して、Androidアプリケーションが持つGoogle IDを安全に交換する方法です(パスワードは最初のSSO中に自動生成されますエンドユーザは自分のパスワードを知らないので、Webプラットフォームとモバイルプラットフォームの両方にログインするためにSSOのみを使用します)。 Androidアプリが正しく認証して、AndroidアプリとRESTエンドポイントの間の通信を「ホワイトリスト」していると信じていれば、ここのキーワードは「安全」です(Androidアプリのみが知っている「サービスアクセストークン」など) )、潜在的なハッカーは、2人の間の通信をリバースエンジニアリングまたはスニッフィングすることができ、RESTエンドポイントを直接呼び出すことができ、同じ信頼できるアクセストークンを使用して自身を識別することができる。実際には、任意のランダムなユーザーのアクセストークンを取得します。