One life, One password その2
どうもhaseです。
前回SSOの話題を取り上げました。
今回はその実装方式について見ていきたいと思います。
実装方式の種類
wikipediaさんによると、実装方式は大きく5つあります。
上記4と5を合わせてフェデレーション方式なんて言い方もしますが、こちらが今後主流となる方式と言われています。
では実際に中身を見ていきます。
-
ケルベロス認証
とりあえず名前がかっこいい。冥界の番犬ケルベロス君に守ってもらえばどんなサービスも安心ですね。でもハリー◯ッターしかり、琴で眠らされて門番としては結構ザルなイメージが…笑
ザルイメージはさておき、ケルベロス認証はインターネットなど公開されたネットワークで使うために開発された認証システムです。仕様は、RFC4120やRFC4121で規定され、マイクロソフトのActive Directoryなどが対応しています。クライアントは、まず認証サーバーへとログオンし、シングルサインオンしたい各種サーバーの利用時に、チケット交付サーバーから利用先のサーバー用チケットをもらってアクセスします。
引用元:ケルベロス認証(Kerberos Authentication)とは
Kerberos認証では、チケットが盗聴されるとなりすましの被害を受ける可能性があるため、「時刻同期」によってその対策を実施しています。
チケットの中には、送信時刻(タイムスタンプ)が記録されていて、チケットを受け取ったサーバーが、チケットのタイムスタンプとそのサーバーの設定時刻とのズレが大きいと認証に失敗するようになっています。例えば、Active Directory環境では、初期設定で5分ずれると認証時にエラーが表示されるため、クライアント・サーバ間で時刻同期を実施しておく必要があります。
-
リバースプロキシ型
リバースプロキシ型のシングルサインオンは、Webブラウザからのアクセスを一度リバースプロキシサーバーが受け、そのリクエストをバックエンドに置かれたWeb サーバーに中継する構造を取ります。
引用元:https://boxil.jp/mag/a2411/
リバースプロキシへのアクセスが集中してしまうため、負荷分散等は必須であるものの、アプリケーションに依存せず、セキュアな認証を構築できます。
ユーザ数が少なく、アプリが多い場合に向いていると思います。
-
エージェント型
エージェント型とは、アプリケーションサーバー自体に仲介役の「エージェント」というソフトを入れる方法です。HTTP cookie(クッキー)が利用されます。
引用元:https://boxil.jp/mag/a2411/
リバースプロキシ型と違い、ネットワーク構成を気にしたり、負荷分散等を考える必要はありませんが、Webサーバごとにエージェントを入れる必要があったり、Webサーバがエージェントに対応していなかったり、エージェントの管理がちょっと大変そうです。
ユーザ数は多いけどアプリが少ない、なんて場合に向いてるんじゃないでしょうか。
-
フェデレーション方式
SAML, OpenIDについての詳細は次回に譲るとして、まずはフェデレーション方式について概要を説明します。
フェデレーション方式とは、クラウドサービス間を、パスワードの代わりにチケットと呼ばれる情報を受け渡しすることで、シングルサインオンを実現する方式です。
引用元:https://boxil.jp/mag/a2411/
この方式の画期的なところは、異なるドメイン間でSSOが実現できるという事です。というよりも、クラウドサービスの目覚ましい発展を受けて、それらに対してSSOを実現するために標準化(SAMLやOpenIDなど)されつつあるのがフェデレーション方式です。そういった意味で、今後主流になっていく、と言われています。実際、「Office365」、「G Suite」、「Salesforce」、「Box」など、多くの海外クラウドサービスが対応しています。
まとめ
SSOを実現する方法について幾つか触れました。