(Photo by:Marc Wathieu)
最近のオープンAPIのトレンドの中で、セキュリティやアクセス管理に関する議論が高まっており、その中で「OAuth」は、比較的安全なAPIアクセス認可の標準仕様として注目を集めている。
多くのFinTechアプリケーションでOAuthが採用され、FacebookやTwitterアカウントでログインできるサイトサービスでもOAuthが認証に使われている。このOAuthの概要から認証の仕組み、今後の課題について見ていきたい。
そもそもOAuthとは何か?
OAuthは、トークン(認可証)によるAPIアクセス認可の標準仕様である。例を挙げて説明をすると、最近、個人向けの資産管理の機能を持つクラウド会計ソフトが多数出てきており、ユーザーは複数の銀行口座、マイレージ、電子マネー等の残高を1つのアプリからチェックする事ができる。これは、ユーザーの認可を受けたクラウドソフトが銀行口座等の残高のデータにアクセスをしているのだが、もしOAuthの様なオープンAPIのアクセス認可の仕組みが無い場合はどうなるだろうか?ユーザーはクラウドソフト事業者に銀行口座等のIDとパスワードを預けなければならない。そうすると、クラウド事業者自身が不正利用する恐れ、情報漏洩のリスクがあるし、銀行口座等のパスワードを変更した際は、その都度、クラウドソフト事業者に通知しなければならず、使い勝手が悪くなる。
これを解消するために出来たのが、トークンによるアクセス制御である。当初、トークンベースのアクセス認可に標準仕様は存在しなかったが、開発者コミュニティの議論から発展して、2007年にOAut 1.0が制定された。その後、OAuth 1.0の脆弱性を修正したOAuth 2.0が2012年に制定され、OAuth 1.0は廃止されている。
ちなみに、最近、話題のポケモンGOのiOSの初期版で不具合があり、ポケモン GOの運営会社がユーザーの許可なくGoogleアカウントの「フルアカウントアクセス」のトークンを得る事ができる現象が発生した。これはポケモンGOが廃止されているはずのOAuth1.0を使用してしまった事が原因と言われている。ポケモンGOの開発元のNianticは既にこれに対する修正をリリース済である。
OAuth 2.0による認証の仕組み
それでは、OAuth 2.0による認証の仕組みを、クラウドソフト事業者が銀行口座の残高を表示する例を使って説明しよう。ユーザーがアプリで銀行口座の残高表示の操作を行うと、クラウドソフト事業者は、銀行の認可サーバーに対して認可リクエストを行う。すると、認可サーバーはユーザーへ、「クラウドソフト事業者が銀行口座の残高のデータへのアクセスを求めていますが、許可しますか?」という権限移譲の確認をしてくる。それに対し、ユーザーが許可を行うと、銀行はクラウドソフト事業者へアクセストークンを提供し、クラウドソフト事業者はそのアクセストークンを使って銀行口座の残高があるサーバーへAPIアクセスを行うのである。
(Photo by:scottjacksonx)
OAuth 2.0の課題
現在、標準となりつつあるOAuthであるが、改善の余地も存在する。OAuthを使って認証を行う際は、API事業者が適用サービス毎に、スコープやアクセス許諾の実施方法を定義しなければならない。OAuth 2.0はAPIアクセス許可の標準仕様であるが、まだ「標準化」されきれていない部分や「範囲外」とされている部分が多数あるのだ。
例えば、トークンでのアクセス可能な範囲を制限するために、どのようにスコープを定義するのかが、OAuth 2.0では定められていない。参照のみ、変更可能、等の処理内容をどういう値で表現するかは、各社独自で定義しなければならない。又、ユーザーへ個人情報へのアクセス認可をもらう際にも、どのようにユーザーを特定し、アクセス許諾をしてもらうかは、定義されていない。
この様な事を各社独自の仕様で定義して行くと、簡便さを優先してセキュリティに問題があるケースが発生する可能性がある。そのため、SAMLやWS-Federation等の利点を取り入れてOpenID Connectが制定され、OAuth 2.0を補完するものとして現在、注目され始めている。
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments