シングルサインオンとセッション管理の問題


OpenIDが普及してくるとおそらく問題点として浮上するのが、シングルサインオンを実現するしくみとして避けられないセッション管理の問題がある。


具体的に言うと、OpenIDを提供するA社から、OpenID対応サイトであるB社、C社、D社にOpenIDを利用してログイン(シングルサインオン)した後、A、B、C、Dいずれかのサイトでログアウトしたとしても、それぞれのサイトでのセッション管理はそれぞれのサイトごとの設定に依存しているため、ユーザーが明示的にログアウトをしたサイト以外のサイト上ではログアウトしたことにならなず、ログイン状態のセッションが残ってしまうということの問題のことである。


これはシングルサインオンのしくみを熟知しているならともかく、一般の利用者からは理解しづらく、このような問題が起きうることを知っている利用者も少ないため、無警戒に利用するユーザーの間でいずれ実際の被害も現れてくるだろう。


結論としては、OPであるA社、OpenID対応サイトであるB、C、D社の間で連携したログアウトのしくみが必要になる。イメージでは下記の感じ。


1.OpenID対応サイトB社でユーザーがログアウト

ここで、B社はユーザーがログインする時に使ったOPに対して、自社サービス上でそのユーザーがログアウトしたことを通知する。

この時点でB社上ではログアウト状態にする。


2.OPであるA社がその通知を受け、各OpenID対応サイトへさらに通知

OP側で前回通知を受けたあと、そのユーザーがOpenIDを使ってシングルサインオンしたすべてのOpenID対応サイトをリストで管理しておく(ドメイン単位か)。

それらのサイトのうち一社からログアウトの通知を受けたら、そのユーザーが利用しているOpenID対応サイトすべてに同じ通知を配布する。

この状態でA社上ではログアウト状態にする。


3.OpenID対応サイトC社、D社でもログアウトさせる

OPであるA社からの通知を受け、C社、D社でもそのユーザーのアカウントをログアウト状態にする処理を行う。これで、そのユーザーがOpenIDを使ってログイン(シングルサインオン)したサイトすべてでログアウトした状態になる。



ひどいざつだけど、現状でこの問題を解決したいならイメージ的にはこんな感じではないだろうか。

ただ、これらは各社それぞれの信頼関係をもとにしたしくみなので、それぞれがちゃんと対応してくれないと、実現しない。なので、実際のところはOpenID Foundationでそもそもの仕様としてこれらのしくみを取り込んだ機能を実装してもらう必要があるかもしれない。

ただ、OpenIDが完全に世の中に浸透する前に、ログアウト処理の同期をとるしくみはセキュリティに見ても必須になるだろう。

もう少し考えががまとまったらアップデートしたいと思う。