データ活用・データ連携のお役立ちコラム
データ活用・データ連携のお役立ちコラム
インターネットサービスを便利につなぐ仕組みとして広く使われているOAuth。しかし、その便利さの裏に仕組みの複雑さやセキュリティ上のリスクが潜んでいることをご存じでしょうか。この記事では、OAuthの基本からOAuth 2.0の特徴、実際に起こり得る危険性、そして安全に活用するための具体的な対策までをわかりやすく解説します。さらに、業務効率化につながる最新ソリューションについてもご紹介します。
OAuthとは、インターネット上のサービスどうしが安全に情報をやり取りするための仕組みです。たとえば、あるウェブサービスにログインする際に「Googleアカウントでログイン」や「Twitterアカウントでログイン」と表示されることがあります。この仕組みを利用するときにバックエンドで動いているのがOAuthです。ユーザーはIDやパスワードを直接そのサービスに渡す必要はなく、かわりにGoogleやTwitterなど信頼できる提供元に一度だけ認証してもらい、その“証明書”を相手のサービスに提示することでアクセスが可能になります。これにより、複数のサービスで同じパスワードを入力するリスクを避けることができ、利便性と安全性を両立できるというわけです。
OAuthとOpenID Connect は、どちらもインターネット上でユーザーの情報をやり取りするときに使われる仕組みという意味では似ています。しかし、目的と役割に違いがあります。
OAuthは、サービスどうしが「この人は確かに利用者本人で、一定の範囲の情報を使うことを許可されています」ということを証明する仕組みです。たとえば、家計簿アプリが銀行の入出金データにアクセスする場合、ユーザーは銀行のIDやパスワードを直接家計簿アプリに渡さなくても、OAuthを通じてユーザーが「この部分のデータだけ見てもよい」という許可を与えるようなことができます。
一方、OpenID Connectは「あなたが誰であるか」ということを証明する仕組みです。GoogleやYahoo!などのアカウントを使って、他のウェブサービスにログインできるのはOpenID Connectの仕組みによるものです。
つまり、OAuthは「何ができるかという権限の委任」、OpenID Connectは「誰であるかという本人確認」に主眼を置いています。
OAuthを利用する大きなメリットは、ユーザーが複数のサービスを安全かつ便利に使えるようになることです。通常であれば、新しいウェブサービスを使うたびにIDやパスワードを登録しなければならず、管理が煩雑になってしまいます。ところがOAuthを利用すれば、すでに持っているGoogleやFacebookなどのアカウントを使って認証が行えるため、簡単にログインできます。しかも、その際に自分のパスワードを相手のサービスに直接渡さずにすむため、情報漏えいのリスクを減らせます。さらに、OAuthではアクセスの範囲を細かく指定できるため、たとえば「連絡先の一部だけ共有する」といった限定的な許可が可能です。この仕組みにより、必要最小限の情報へのアクセス許可が可能になり、安心してサービスを利用できます。加えて、一度許可したアクセスを後から取り消すことも可能です。OAuthを利用すれば、利便性とセキュリティを両立させながら、日常的に安心してオンラインサービスを活用できます。
OAuth 2.0とは、OAuth 1.0の後継として策定された新しいバージョンです。OAuth 1.0とOAuth 2.0の違いは、設計思想と仕組みの洗練度にあります。最初に登場したOAuth 1.0は、サービス間でユーザーの認証情報を共有せずに安全にアクセス権を渡すという目的は果たしましたが、仕様がやや複雑で、拡張性や運用面で課題がありました。これを改良したのがOAuth 2.0です。OAuth 2.0では、認可コードやアクセストークンの仕組みが整理され、スマートフォンアプリやWebサービスなどさまざまな利用環境に対応できる柔軟さを備えています。また、OAuth 1.0が認証にも使われがちだったのに対し、OAuth 2.0は認可を中心に設計されており、OpenID Connectと組み合わせることで認証/認可で正しく利用できるようになりました。この記事では、シンプルにOAuthとだけ記述していますが、厳密にはOAuth 2.0のことを意味しています。
OAuthは、平たくいえば「あなたのかわりに、信頼できるサービスから必要な範囲だけの合鍵を受け取り、別のサービスに見せることでそのサービスでの動作を可能にする仕組み」です。ここでは、先ほども挙げた、家計簿アプリで「Googleでログイン」と表示される場面を使って別のサービスとの連携を考えてみることにします。“登場人物”は、ユーザー、家計簿アプリ、ユーザーのアカウントを管理する提供元(ここではGoogle)、そして家計簿アプリが必要とするデータが置いてある場所(APIサーバー)です。ユーザーはデータが置いてある場所のパスワードをアプリに直接教えず、提供元の画面で本人確認と「どこまで見てもよいか」の同意を行います。
全体の流れは次の通りです。ユーザーが家計簿アプリの「Googleでログイン」を押すと、画面はGoogleに切り替わり、Googleが本人確認と権限の範囲を尋ねます。ユーザーが許可すると、Googleは一度だけ使える合言葉(認可コード)をアプリに返します。家計簿アプリは裏側でその合言葉と引き換えに、短時間だけ有効な入館証(アクセストークン)をGoogleから受け取り、それを提示して必要なデータにアクセスします。このプロセスで、ユーザーのパスワードは家計簿アプリには渡りません。この入館証(アクセストークン)は時間が経つと失効しますが、必要に応じて長持ちの更新用鍵(リフレッシュトークン)で新しい入館証を発行できます。権限の範囲は細かく区切られており、たとえば、利用明細は見せず口座種類だけ、といった最小限の公開が可能です。許可した接続は、Googleなどの接続アプリ管理から後でいつでも取り消すことができ、アプリ側が入館証を失くしても提供元で無効化することができます。
また、スマホアプリでは、合言葉を盗まれにくくするために「PKCE(ピクシー)」という追加の合言葉をその場で作ってやり取りします。Webサイトでも偽サイトに誘導されないように行き先、戻り先URLを厳密に固定し、取引ごとに印を付けて差し替えを防ぐ工夫が使われます。
こちらの図では、OAuth利用での“登場人物”を、ユーザー、アプリ、Googleなどの認証サーバー、データの場所(APIサーバー)として流れを説明します。
図 OAuthの流れ
OAuthには、その便利さの陰で実はいくつかのリスクが存在します。そもそもOAuthは、ユーザーが自分のIDやパスワードを直接教えずに第三者サービスにアクセス権を渡す仕組みですが、この仕組みを悪用されたり、運用を誤ったりするとセキュリティ上の弱点になる可能性があります。たとえば、ユーザーが許可画面の内容を十分に確認しないまま承認を与えてしまうと、本来意図していない情報まで共有される可能性があります。また、アクセストークンが第三者に盗まれると、本人になりすまして長期間にわたりサービスを利用されてしまう危険性もあります。さらに、通信経路が暗号化されていなければ、認可コードやトークンが盗聴される恐れもあります。このように、OAuthは、仕組みそのものはよくできているといえますが、運用や設定次第でリスクを抱えこむことにもなります。以下に、代表的な3つのリスクを詳述します。
OAuthを利用する際、ユーザーは「このアプリにアクセスを許可しますか?」という確認画面を目にします。ここには、アプリが要求している権限の内容、たとえば「メールの読み取り」や「プロフィール情報の取得」などが表示されています。これに対して、ユーザーが内容をよく確認せずに承認ボタンを押してしまうと、本来必要のない範囲の情報まで相手に渡ってしまう可能性があります。これは意図しない情報流出につながる危険があります。またそのアプリが悪意を持っていた場合、個人情報が不正に利用されるリスクもあります。したがって、ユーザー側では承認画面で確認を求められていることを流し読みせず、どのような情報を共有するのかをよく見る習慣を持つことが大切です。
OAuthでは、ユーザーのかわりにサービスにアクセスするための「アクセストークン」を発行します。このトークンが第三者に盗まれると、たとえパスワードを知られなくても、正規のユーザーになりすましてシステムを利用される恐れがあります。特に、トークンが端末に平文で保存されていたり、通信経路で盗聴されたりすると危険です。盗んだ人はそのトークンを使ってメールを閲覧したり、データをダウンロードしたり、さらには他のサービスへの連携を勝手に操作することができます。そのため、トークンの安全な保存はOAuthに関わる当事者間において非常に重要な“ミッション”といえます。
アクセストークンには有効期限が設定されています。便利さを優先して長く設定すると大きなリスクが生じます。万が一トークンが漏えいした場合、その有効期限が長いほど、不正利用が続く可能性は高まります。たとえば、1日で失効するトークンなら被害は限定的ですが、数カ月間有効なトークンであれば、攻撃者はそれだけ長い時間データにアクセスすることができます。ユーザーが気づかぬ間に、膨大な機密情報が流出し続けるという恐れもないとはいえません。したがって、利便性と安全性のバランスについては十分に考慮し、トークンの有効期限はできるだけ短めに設定し、必要に応じてリフレッシュトークンを活用するようにします。OAuthの利用では、このようにセキュリティを考えた設計が求められます。
上記で見たように、OAuthは使い方を誤ると大きなセキュリティ事故につながってしまいます。それでは、どうすれば安全に利用することができるでしょうか。ここでは、重要な対策ポイントを3つ挙げてみました。
OAuthの仕組みではアクセストークンが非常に重要な鍵の役割を果たします。もしこれを攻撃者が盗むと、ユーザーになりすますことができ、データに対して自由にアクセス可能になってしまいます。そのため、通信は必ずHTTPSで暗号化するとともに、トークンは暗号化ストレージや専用の安全な仕組みに保存し、アプリ内に平文で残さないようにすることです。
OAuthでは認可サーバーが処理結果をリダイレクト先に返しますが、このURLが悪意のあるサイトにすり替えられるとトークンを盗まれる危険があります。そのため、事前に正規のURLをホワイトリストとして登録しておき、それ以外のURLにはリダイレクトできないようにあらかじめ設定しておくことが重要です。この作業も、セキュリティを高いレベルで保つ上で不可欠の施策といえます。
トークンに長い有効期限を設定すると、一度漏えいした際に長期間不正利用されるリスクにさらされることになります。そこで、期限はひとまず短めに設定し、必要に応じてリフレッシュトークンを再発行する仕組みにしておきます。こうしておけば、仮にトークンを盗まれたとしても、利用時間を制限でき、被害をある範囲内に限定することが可能です。
ACMS Cloudは、OAuth 2.0を始めとするセキュアな認証方式に対応したクラウド型データ連携プラットフォームです。ACMS Apexの信頼性を継承しつつ、メールサービスとの連携ではOAuth 2.0に対応しており、ユーザーがパスワードを渡すことなく安全に権限管理が可能です。さらに通信の暗号化(STARTTLS/TLS v1.3)にも対応しており、認可/認証の安全性をしっかり担保できます。そのため、確実かつ安心・安全なシステム連携を実現できます。
さらに詳しい情報はこちら
https://www.dal.co.jp/products/di/acmscloud/outline.html
この記事では、OAuthの基本から仕組み、そのメリット、リスクや安全に利用するための対策までを解説してきました。インターネットの利便性と安全性を両立させる上で、この認証の仕組みを正しく理解するとともに、適切に運用するのは非常に重要なテーマです。しかし、一から十まで自社で管理するのは負担が大きいため、ニーズに合ったソリューションを利用することも大切です。ここでお伝えしたナレッジが皆さまの今後の選択に役立ち、安心して業務やサービスの効率化に取り組むための一助となれば幸いです。