IT社員3人組によるリレーブログ

某IT企業に勤める同期3人が、日常で思ったことを記録していきます (twitter: @go_mount_blog)

One life, One password その2

どうもhaseです。

前回SSOの話題を取り上げました。

go-mount.hatenablog.com

 

今回はその実装方式について見ていきたいと思います。

 

実装方式の種類

wikipediaさんによると、実装方式は大きく5つあります。

シングルサインオン - Wikipedia

  1. ケルベロス認証
  2. リバースプロキシ型
  3. エージェント型
  4. SAMLに基づくアイデンティティプロバイダ(IdP
  5. OpenIDに基づくアイデンティティプロバイダ(IdP

上記4と5を合わせてフェデレーション方式なんて言い方もしますが、こちらが今後主流となる方式と言われています。

では実際に中身を見ていきます。

 

  1. ケルベロス認証

とりあえず名前がかっこいい。冥界の番犬ケルベロス君に守ってもらえばどんなサービスも安心ですね。でもハリー◯ッターしかり、琴で眠らされて門番としては結構ザルなイメージが…笑

f:id:go-mount:20181125233325p:plain

 

ザルイメージはさておき、ケルベロス認証はインターネットなど公開されたネットワークで使うために開発された認証システムです。仕様は、RFC4120やRFC4121で規定され、マイクロソフトActive Directoryなどが対応しています。クライアントは、まず認証サーバーへとログオンし、シングルサインオンしたい各種サーバーの利用時に、チケット交付サーバーから利用先のサーバー用チケットをもらってアクセスします。

 

 

f:id:go-mount:20181125233953g:plain

引用元:ケルベロス認証(Kerberos Authentication)とは

 

Kerberos認証では、チケットが盗聴されるとなりすましの被害を受ける可能性があるため、「時刻同期」によってその対策を実施しています。

チケットの中には、送信時刻(タイムスタンプ)が記録されていて、チケットを受け取ったサーバーが、チケットのタイムスタンプとそのサーバーの設定時刻とのズレが大きいと認証に失敗するようになっています。例えば、Active Directory環境では、初期設定で5分ずれると認証時にエラーが表示されるため、クライアント・サーバ間で時刻同期を実施しておく必要があります。

 

  1. リバースプロキシ型

リバースプロキシ型のシングルサインオンは、Webブラウザからのアクセスを一度リバースプロキシサーバーが受け、そのリクエストをバックエンドに置かれたWeb サーバーに中継する構造を取ります。

f:id:go-mount:20181125235633j:plain

 引用元:https://boxil.jp/mag/a2411/

 

リバースプロキシへのアクセスが集中してしまうため、負荷分散等は必須であるものの、アプリケーションに依存せず、セキュアな認証を構築できます。 

ユーザ数が少なく、アプリが多い場合に向いていると思います。

 

  1. エージェント型

エージェント型とは、アプリケーションサーバー自体に仲介役の「エージェント」というソフトを入れる方法です。HTTP cookie(クッキー)が利用されます。

f:id:go-mount:20181126000733j:plain

引用元:https://boxil.jp/mag/a2411/

 

リバースプロキシ型と違い、ネットワーク構成を気にしたり、負荷分散等を考える必要はありませんが、Webサーバごとにエージェントを入れる必要があったり、Webサーバがエージェントに対応していなかったり、エージェントの管理がちょっと大変そうです。

ユーザ数は多いけどアプリが少ない、なんて場合に向いてるんじゃないでしょうか。

 

  1. フェデレーション方式

 SAML, OpenIDについての詳細は次回に譲るとして、まずはフェデレーション方式について概要を説明します。

フェデレーション方式とは、クラウドサービス間を、パスワードの代わりにチケットと呼ばれる情報を受け渡しすることで、シングルサインオンを実現する方式です。

f:id:go-mount:20181126002923j:plain

引用元:https://boxil.jp/mag/a2411/

 

この方式の画期的なところは、異なるドメイン間でSSOが実現できるという事です。というよりも、クラウドサービスの目覚ましい発展を受けて、それらに対してSSOを実現するために標準化(SAMLOpenIDなど)されつつあるのがフェデレーション方式です。そういった意味で、今後主流になっていく、と言われています。実際、「Office365」、「G Suite」、「Salesforce」、「Box」など、多くの海外クラウドサービスが対応しています。

 

まとめ

SSOを実現する方法について幾つか触れました。

次回はSAMLOpenIDについてもう少し触れたいと思います。