http://gigazine.net/news/20160802-pokeiv-pokemon-go/
GIGAZINE経由で話題になっているサイトの仕組みについて、私はあのサイトの作者でないけど、解説してみます。
A. パスワードが盗られのではなかろうか
の3点と思われます。
実際に中の人がどういう運用しているかは中の人次第なので、信じるか信じないかという話になるから、水掛け論がはじまるだけなのでやめときます。
まずAについて
Pokémon Trainer ClubについてはYes。そりゃパスワード入れてますもの。
Google AccountsについてはNo。あくまでもパスワードを入力する先はGoogleになるので、他のサイトは介在できない仕組みです。
以下、Pokémon Trainer Clubについては自明なので言及しません。
Bについて
Yes。
どのくらいの長さの時間使えるかは分からないですが、Access Tokenかセッションのどちらかの有効期限内では、勝手に操作出来るものと思われます。
Cについて
以下、理由を。
まず彼のサイトの認可取得方法は、OAuth2という物にもとづいています。
これは、あるサイト上のユーザリソースを、外部のサイト若しくはプログラムから操作する場合に用いる方法です。
OAuth2自体はオープンかつセキュアな仕様ですが、運用によっては当然危険な事が起こりえます。
よって、Aについては(Google Accountsならば)No。そもそもパスワードを受け渡さないための仕組みだからです。
さてこの仕組ですが、認可を得るための方法は幾つかの手段があります。
ココでは彼のサイトで使っている方法(AndroidアプリやiOSアプリなどのための認可手段)だけを説明しますと、
1. OAuth2 ClientIDを用いてAuthorization Codeを取得
2. Authorization CodeをOAuth2 ClientIDとClient Secretを用いてAccess Tokenに分解。Authorization Codeは一回のみ使用できる(あってますよね?)
3. Access Tokenを特定の場所に投げることで、サイト側はユーザの情報を知ることが出来る
となります。
彼のサイトで用いているアクセス範囲で確認できるのは、ここでAccess Tokenを用いて取得できるのは、Google Accountsのメールアドレスくらいです。
コードをコピーする仕様になっていますが、それは1と2の間で行われています。
もし何らかの手段でConsumer Secretを知っているなら、Access Tokenに分解する作業は彼のサイトで行っている可能性が高いと思われます。
しかし、普通Client Secretはサーバサイドに置き、APIで分解する形が多いと思われます。
分解された後のAccess Tokenは一定期間で有効状態が切れます。
Client IDはある意味オープンな情報なので、コード発行画面までは、知っている人なら比較的たやすく表示させることが出来ます。
よって、「ポケモンGOが」と表示されているのは、このClient IDが本物だから出ているのであって、彼のサイトの作者がそういう詐称行為を行っているわけではないです。
ここからは、Android用のtokenの動きを知らないので推測となります。
Access Tokenは1時間弱の短い期間で有効期限が切れます。
その後のAccess Tokenの取得は、一回ユーザが認可すると再度の取得には認可画面による対話操作を必要としない仕組みを使い、アプリケーション内で自動的に取得できるような実装になっているんではないでしょうか(AndroidやiOSに詳しい方、補足願います
また、Access TokenはセッションやDB内で管理し、クライアントアプリ側には戻さないのがよくある姿ではないかと思います
(ステートフルは重いからとクライアントに戻す実装をしている場合もあるとは思いますが)
よって、通常であればAccess TokenがBはセッション持続中若しくはAccess Tokenの生存期間中の短い時間ならYes。
Cは可能性は低いものの、Access Tokenをクライアントに送り返す仕組みにしてあり、彼のサイト側でそれをDB等に保存してあるならばYES。
となります。
私は基本的にサーバサイドの人なので、クライアントサイドの常識はそーじゃねーよって話もあるかとは思います。
その時は…すいません。と、予め謝っておきます。
http://anond.hatelabo.jp/20160802223201 >その後のAccess Tokenの取得は、一回ユーザが認可すると再度の取得には認可画面による対話操作を必要としない仕組みを使い、アプリケーション内で自動的...