yaakaito.org

iOSアプリからGithubOAuth使うの見直している

Github, Objective-C, iOS

こんばんは!うきょーです、非常に眠いです。 前回わりとカジュアルな感じでOAuthしたんですが、 こういうツイートをみて、stateのこと書いてなかったからそのことかなーと思ったんですが、 よくよく考えてみれば、起動スキーマ直接叩かれたらなんか起こりそうだよなーとかいろいろ気になってきたのでずっとOAuth2でググったりしてた。

そもそも

前回の感じになったのが単純に、メールとかパスワード入力するのがだるいしあんまりさせたくないなー、OAuthあったなーいけんじゃねー、という感じの理由。 OAuth | GitHub APIを見てて、非Webアプリケーション向けの最初はBasic認証使って〜がやりたくなった感じですね。 で、本来はBasic認証一回使ってーの方がいいと思うんですが、いろいろクライアントなライブラリを見ていると、Client Secretを引数に取ったりしてて、 じゃあこっちでもいいのかなーとなった。

本当か?

で、気になって何個かGithubOAuth使ってそうなアプリを探してみたんだけど、hojokiなんかはUIWebView使ってやってるっぽいしやっぱこっちでいいんかなーと。 けどUIWebViewの作り上URLとか自分で出さないといけない訳ですが、それすら偽装してかなりそれっぽく見せる事は可能なので、 僕が使う側だったらあんまり使いたくないなーと思ってしまった。一緒に変なJSとか走らされてもやだなーと思ったり。(他の人がどう思ってるのかは知らないですが) それだったらSafariに飛ばせばいいじゃん、でcallbackにカスタムスキームでー、でできたわけ。で、そこに弱そうなところがあるなら一旦塞ぐかーという感じで作ったのを適当にアップデート。

やったのは、(今回はダミーだけど)stateの付加と、OAuthしている時以外は起動スキーマを無効化した。(今は単純にabortしてるだけ) あとは本番では起動スキーマが使える時間とかも短くしぼったり、もやろうかなと思っていて、 これでよっぽどな感じじゃない限りはインジェクションとかは大丈夫そうな感じがする。 起動スキーマ持って行かれたときもまあClient Secretバレなきゃだいじょ・・・そもそもSecret持っていいの? 一応すごいがんばりをすれば秘密じゃなくなる気がする。

ライブラリにみるOAuth

さっきも書いたけどOAuthClientと名を打ってるライブラリはClient IDClient Secretを要求していることが多いし、 プラスアルファでアカウントとパスワードも要求してたりする。 クライアント仲間ってことでJSも何個か見てみたんですが、 カジュアルにSecretむき出し・・・秘密とは・・・みたいな感じになってて何を信じればいいのか分からなくなってきた。(まあTitaniumとかで使ってねってことだとは思うんだけど・・・)

Implicit Flow

さまよってるうちに「単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる」 というのに出会った、関係ありそうなので読んでみたんだけど、アプリケーションの認証として使うから駄目なのであって、 クライアントとして認可される場合にはまあ大丈夫か、ってことでいいのかな。 一旦は置いておいて良さそうだけど、あとで自分で見直したときのメモ。

正直どうやるのが理想なのかよくわからなくなってきたね、ずばっと教えてエロい人!