スマホでゲームアプリをインストール。起動。名前を聞かれる。入力して決定。
この段階でユーザーは確実に誰かと重複する名前のみしか入力していません。
しかしそれだけで問題なく次回以降もユーザーが特定され、データのやり取りもできてしまいます。
ログインをすることなくやり取りすることができるのであれば、自分もその方法でアプリを作ってみたいと思いました。
ネイティブアプリからデータを取得するためには、
ネイティブアプリ→RestAPI→データベースでデータをjsonでやり取りするのが良さそうでした。
ただ、なんの保護もなくエンドポイントを用意した場合。ブラウザで簡単にデータが取得できてしまいます。
ユーザーデータを扱いたいので、アプリからのアクセスでのみAPIを使用できるようにする必要があります。
なので、APIを保護する方法を調べました。
結果、調べても調べてもOAuth2という認証の仕組みが出てきました。
最初は認証サーバーにクライアントとしてアプリを登録し、アプリにクライアントシークレットをもたせてクライアント認証方式でいいのかと思っていまいたが、どうやらネイティブアプリにシークレットをもたせるのはNGのようで、
調べると、どうやらPKCEを使えと出てきます。
ただ、PKCEを使う場合。そこには必ずIDプロバイダーがいます。
GoogleやFacebook、自分でやりたい場合はAuth0などのサービス。
これらは確実にユーザーにIDとPW、メールアドレスを要求します…。
一体全体、スマホアプリはどうやってユーザーのクレデンシャルなしに安全な通信をしているんでしょうか…?
The Best Way to Connect Your iOS App to MySQL Database (4 Steps)
上記ページでは、IOSからAPIを通してMYSQLのデータを持ってくる方法について書いてありました。
このページのコメント欄に以下の質問がありました。
アプリが認証して結果を返すことだけが必要な場合、つまり、このデータをプルするためのクローズドAPIが必要な場合はどうなりますか。どうすればそれを実装できますか?
それに対して記事の投稿者は
クローズドAPIが必要な場合は、リクエストとともにキーを渡すことを検討できます。PHPサービスは、結果を返す前にキーをチェックします。この方法では、ユーザー登録/ログインシステムを作成する必要がなくなり、APIをキーを持つ特定の呼び出し元のみに制限します。
と言っています。
さも簡単そうに言ってるのですが、そんなに簡単なものなのでしょうか?
クライアント認証がNGであるならば、このキーのやり取りもNGにしか思えないのですが…。
何かこのキーを秘匿できる方法があるのでしょうか?
どなたかご助力お願いいたします。
あなたの回答
tips
プレビュー