アカウントが溢れる時代で
今から10数年前のインターネットの黎明期から普及期に遡ると、一般ユーザにとって「アカウント」といえば、インターネット接続プロバイダ(ISP)へのログインパスワードと、せいぜいメールや一部のWEBサービスくらいを指したものでした。しかし、コンピュータやスマートフォンが普及し、SNSを含め、さまざまなWEBサービスが存在している現在において、私たちは比べものにならないほど多種多様のアカウント情報を保持するようになっています。たとえば、フェイスブックやツイッターといったWEBサービスにログインする際に入力する「ユーザID」と「パスワード」などがそれです。
毎回それらを入力するのも、そもそもすべてのIDとパスワードを覚えておくのも大変ですから、macOSではパスワードを代わりに覚えて入力を省力化する「キーチェーン」という仕組みがありますよね。
クラウド時代のアカウント管理
一方、Mac以外のOSの世界はというと、同様の仕組みを持ったOSもありますが、ユーザが手作業でパスワードを管理することが未だ多く、たくさんのアカウント情報を覚える必要があります。面倒くさがって、もし複数のWEBサイトで同じパスワードを使い回したりすると、その中の1つのアカウント情報がクラック(不正利用)されると、連鎖的にほかのWEBサイトの情報も危険にさらされてしまいます。
また、WEBサイトの運営側からしてみても、ユーザから預かったパスワードなどの管理は簡単なものではありません。もしこれらの情報が漏洩でもしようものなら、社会的影響も大きく、企業経営にも影響するほどです。
そこで、ネットワークにおいて「ユーザを認証する」作業と「実際のサービスを提供する」作業を分ける仕組みが考えられました(図1)。認証する側はパスワードなどを安全に管理し、「このアクセスはユーザAさんだよ」と「お墨付き」を与えることに専念します。よって、実際のサービスを提供するWEBサイト側は、そのお墨付きを元にサービスを提供することに集中できます。万が一、サービスのWEBサイトがクラックされても、そこにパスワード情報はないので、被害はそこまでで済むというわけです。こうしたやりとりを「クレームベース認証」と呼びます。クレームベース認証を実現する仕様として、「OAuth」や「OpenID Connect」、「SAML」などが提案されました。
ツイッターやフェイスブック、ヤフーなどのアカウント情報を代用してほかのサービスにログインできるWEBサービスがありますが、それはクレームベース認証を使っているのです。これにより、いちいち個別のパスワードを利用しなくてもいい、パスワードをたくさん管理しなくていい便利な世の中になってきました。
インターネットアカウントで管理
とはいえ、クレームベース認証を元にしたアカウント管理では、単純にパスワードを管理しているだけだと機能が不足してしまいます。そこで用意されたのが、「Account.framework」と「Social.framework」という2つのフレームワークです。
まず、Account.frameworkは、それがどういったWEBサイトなのかといった、アカウントを使うのに必要な情報(パスワードを除く)をまとめて管理し、ツイッターならツイッター、フェイスブックならフェイスブックのやり方に応じたログインのための機能を提供する仕組みです。次にSocial.frameworkはAccount.frameworkを元に、もっと簡単にインターネットのサービスを利用できる、たとえば「ツイッターにつぶやきを投稿する」などといった機能をまとめて提供するものです。
この2つのフレームワークを利用することで、サファリを使ったWEBブラウザにおけるWEBサービスの利用だけではなく、ソフトウェア上からインターネット上に接続し、WEBサービスを簡単に利用できるようになります。クレームベース認証でのサインインをWEB上に実装したり、パスワードを管理するといった面倒ごとを、これら2つのフレームワークで全部代わりに行ってくれるというわけです。
Account.frameworkで利用できるWEBサービスのアカウントを管理するのが、「システム環境設定」の[インターネットアカウント]パネルです(図2)。Macにログインすると、ユーザごとに「accountsd」というバックグラウンドプロセスが実行されるのですが、このaccountsdがすべての「インターネットアカウント」を統括しています。ほかのソフトウェアはフレームワークを通じて accountsdにおうかがいを立てるというわけです。
このインターネットアカウントは、OS X 10・8マウンテンライオンといった古いOSの頃だと、単なるプロパティリストに保存されていました。しかし、それでは不便だったのか、現在のOSではSQLiteのデータベースに格納されています。データベースはホームフォルダの[Library/Accounts]以下にあります。
データベースの構造は非公開になっていますが、「sqlite3」コマンドで見る限り、インターネットアカウントで入力したアカウント情報は「ZACCOUNT」というテーブルの中に格納されています。どのタイプのアカウントかは番号で管理されていますが、「ZACCOUNTTYPE」に番号ごとのタイプの情報、たとえばフェイスブックやツイッターといった固有のサービス情報などが記載されているのです。
インターネットアカウント
キーチェーンのように単にユーザ名とパスワードを格納するだけではなく、どういったサービスか(フェイスブックやツイッターなど)、WEBサイトの提供するサービスのうちどれを利用するか(メールやカレンダーなど)といった情報も合わせて管理しています。WEBサイトによっては、パスワードは毎回送付するのではなく、お墨付きを得てからそれを保存する場合もあります。これにAccount.frameworkを利用すればこの情報を利用して、アプリケーションはパスワードなどを知らなくてもサービスを利用できるのです。そして、Social.frameworkを使えばさらに、ツィートをするなどサイトに応じたサービスを簡単に利用できます。
【Identity Provider(IdP)】
ユーザの認証を行い、ほかのサイトへ「お墨付き」の形でユーザ情報を提供するサービスを提供するWEBサイトのことを「Identity Provider」と呼ばれ、「IdP」と略されます。なお、実際のサービスを提供するサイトは「Resource Provider(RP)」といわれます。IdPはパスワードやそのほか個人情報を管理するため、より安全な運用を求められます。しかし一方で、RPからの認証リクエストなどを通じてそのユーザがどういったサービスを利用しているかがわかります。そもそも、そのIdPのアカウントがないとRPのサービスが利用できないことから、かつてのポータルサイトのように重要なサイトとなるわけです。
【 キーチェーン 】
「キーチェーン」は、macOSでユーザが入力したIDやパスワード、証明書といった情報を一括管理する仕組みです。Core Serviceの一部として提供されており、ほかのフレームワークとも深く連携されており、ユーザからの使い勝手も良いのが特徴です。Account.frameworkもパスワードそのものはキーチェーンに格納しています。なお、「ユーティリティ」フォルダ内にある「キーチェーンアクセス」で格納されている情報を確認したり追加削除ができます。iOSの場合、キーチェーンアクセスがないのですが、「設定」アプリの[Safari]にてパスワードの管理ができるようになっています。
【管理】
キーチェーンのような仕組みは「パスワードマネージャ」と呼ばれ、ウィンドウズにも「資格情報ストア」という形で存在したり、1Passwordのようにソフトウェアで提供されていたりします。
【クレーム】
クレームベース認証の名前にある「クレーム」という単語は、苦情とか悪い意味に取られることも多いですが、本質的には主張や請求を意味し、お墨付き(主張)をやりとりすることからそうした名前がついています。
文●千種菊理
本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。