「認可取得」を含む日記 RSS

はてなキーワード: 認可取得とは

2016-08-02

個体値計算話題になっている件

http://gigazine.net/news/20160802-pokeiv-pokemon-go/

GIGAZINE経由で話題になっているサイトの仕組みについて、私はあのサイトの作者でないけど、解説してみます

 

ブコメを眺めていて問題視されてるのは

 

A. パスワードが盗られのではなかろうか

B. ポケGO勝手操作されるのではなかろうか

C. Tokenの管理杜撰だと危険ではなかろうか

 

の3点と思われます

以下、危険性について述べます

実際に中の人がどういう運用しているか中の人次第なので、信じるか信じないかという話になるから、水掛け論がはじまるだけなのでやめときます

 

まずAについて

Pokémon Trainer ClubについてはYes。そりゃパスワード入れてますもの

Google AccountsについてはNo。あくまでもパスワード入力する先はGoogleになるので、他のサイトは介在できない仕組みです。

以下、Pokémon Trainer Clubについては自明なので言及しません。

 

Bについて

Yes

どのくらいの長さの時間使えるかは分からないですが、Access Tokenかセッションのどちらかの有効期限内では、勝手操作出来るものと思われます

 

Cについて

可能性は低いがYes

ただしポケGO実装次第です。

 

以下、理由を。

まず彼のサイト認可取得方法は、OAuth2という物にもとづいています

これは、あるサイト上のユーザリソースを、外部のサイト若しくはプログラムから操作する場合に用いる方法です。

OAuth2自体オープンかつセキュアな仕様ですが、運用によっては当然危険な事が起こりえます

よって、Aについては(Google Accountsならば)No。そもそもパスワードを受け渡さないための仕組みだからです。

 

さてこの仕組ですが、認可を得るための方法は幾つかの手段があります

ココでは彼のサイトで使っている方法(AndroidアプリiOSアプリなどのための認可手段)だけを説明しますと、

1. OAuth2 ClientIDを用いてAuthorization Codeを取得

2. Authorization CodeをOAuth2 ClientIDClient 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の取得は、一回ユーザが認可すると再度の取得には認可画面による対話操作必要としない仕組みを使い、アプリケーション内で自動的に取得できるような実装になっているんではないでしょうか(AndroidiOSに詳しい方、補足願います

また、Access TokenはセッションDB内で管理し、クライアントアプリ側には戻さないのがよくある姿ではないかと思います

(ステートフルは重いからとクライアントに戻す実装をしている場合もあるとは思いますが)

よって、通常であればAccess TokenがBはセッション持続中若しくはAccess Tokenの生存期間中の短い時間ならYes

Cは可能性は低いものの、Access Tokenをクライアントに送り返す仕組みにしてあり、彼のサイト側でそれをDB等に保存してあるならばYES

となります

 

私は基本的サーバサイドの人なので、クライアントサイドの常識はそーじゃねーよって話もあるかとは思います

その時は…すいません。と、予め謝っておきます

 
ログイン ユーザー登録
ようこそ ゲスト さん