【101シリーズ】シングルサインオンとは何かを考える

前々回の投稿で登場したWindows Azure Active Directoryのお話と、このサイトの中でよく登場するADFS、この2つのテクノロジーに共通する話題としてシングルサインオン(SSO)があります。

今日は、SSOと略して表現されることの多い、シングルサインオンについて紹介したいと思います。

■ ■ ■

シングルサインオンとは何か?ということを聞かれて、ひとことで答えなさいと聞かれたならば、
私はいつも、このように答えています。

1回のサインイン操作によって、あらゆるシステムにアクセスできる仕組み

自分では誰にでもわかってもらえる表現で良いかな、と思っていたのですが、
しかしこの表現はちょっと誤解を生む表現でもあります。

シングルサインオンの意図する「1回のサインイン操作によって、あらゆるシステムにアクセスできる」とは1回サインインを行うと、「この人は既にサインインしましたよ」ということを表す証が発行され(これをトークンとか、チケットなどと呼んでいます。)、発行された情報を持って、システムにアクセスしに行くと、「ああ、○○さんですね。アクセスしていいですよ!」という、やりとりをするものです。

SSO1

ところが、「1回のサインイン操作によって、あらゆるシステムにアクセスできる」という見た目の部分だけを実現できればよいと考えると、このようなシステムもシングルサインオンになってしまうのです。
こちらは2013年10月15日に紹介させていただいた「Windows Azure Active Directoryのアプリケーション連携」でのシングルサインオンのようなアクセス方法です。

SSO2

どちらも、「1回のサインイン操作によって、あらゆるシステムにアクセスできるのだから、それでいいじゃない」と考えるかもしれませんが、それは違います。ここでは、2つの問題点を取り上げましょう。

まず、ひとつ目の問題はパスワードが一元管理されないことです。パスワードがキャッシュされると、パスワードの保存場所が複数になります。そうすると、パスワード変更を行ったときに、キャッシュしている側のパスワードも変更しなければなりません。パスワードは定期的に変更しているケースも多く、毎回何か所かにわたってパスワード変更の設定をするのは面倒ですね。

SSO3

ふたつ目の問題は不正アクセスです。
パスワードのような重要な情報は本来、ユーザー名とパスワードを入力する人の頭の中だけにあるべきものです。それなのに、パスワードをあらかじめ、どこかに保存しておいて、いつでもアクセスできるようにするなんて方法はとても危険なのです。

SSO4

■ ■ ■

とっても危険な方法なのに、どういうわけかパスワードをキャッシュさせておいてシングルサインオンの「便利」というところだけを利用してしまっているケースがとても多いのです。

たとえば、クラウドへのアクセス。
クラウドへのアクセスは、いちいちユーザー名とパスワードを入れなければならないので面倒くさい。だからユーザー名とパスワードをブラウザーやメーラーにキャッシュしているケースがありますが、これってシングルサインオンですか?
違いますね。

SSO5

それからワークグループ。
ワークグループとドメインの違いについて、このような説明を受けた人も多いと思いますが、

SSO6

ワークグループだって、すべてのサーバーのユーザー名とパスワードを同じにしてしまえば、一度サインインしたときのユーザー名とパスワードをコンピューターにキャッシュさせておいて、同じユーザー名とパスワードを他のサーバーにも提示してしまえば、シングルサインオン風アクセスの出来上がり。

SSO7

最後に、Office365について。
Office365もActive Directoryのユーザー名とパスワードをAzure ADと同期するサービスが提供されていますが、これを使えば、1回のユーザー名とパスワード入力によって(厳密には、ひとつのユーザー名とパスワードで)、シングルサインオン風アクセスになります。

SSO8

■ ■ ■

いかがでしょうか?
いずれの方法も、シングルサインオンの「便利さ」だけを借用すべく、
見た目だけをシングルサインオンっぽくした、ハリボテなのです。

ユーザー側からしたら、便利なものかもしれませんが、
運用面から考えると、パスワードが変わった時の問題や不正アクセスの可能性など、
潜在的な問題が色々と潜んでいるのです。

本来、シングルサインオンとは、ユーザー名とパスワードを入力した結果、得られる情報を持って様々なシステムにアクセスしに行くものであって、ユーザー名とパスワードを使いまわすものではありません。

こうした事実を正しく認識し、正しいシングルサインオン環境を実装したいものです。