SSO(シングルサインオン)

SSOとは、一度システム利用開始のユーザー認証 (ログイン) を行うと、複数のシステムを利用開始する際に、都度認証を行う必要がない仕組みのことです。

実現方法は、次の通りです。

  1. リバースプロキシサーバを使ったSSO
  2. ケルベロス認証

リバースプロキシサーバを使ったSSO

各サーバとリバースプロキシサーバの間にファイアウォールなど作り、その先にPC接続できるようにします。

ユーザー側はリバースプロキシサーバにユーザID・パスワードを入力し、ユーザ認証すると、リバースプロキシサーバが各サーバに代理アクセスする方式です。


プロキシサーバは一般的にHTTP(HTTPS)プロキシであることが多いため、ユーザー側もHTTP通信の前提が必要になります。

HTTP通信ということは、各サーバー・PC側もWebアプリケーションであり、すべての通信がHTTP通信で成り立つ必要があります。


ケルベロス認証

ケルベロス認証では、ケルベロスサーバが発行したチケットを持って、対象サーバにアクセスする方式です。

  1. ユーザーは、ユーザーIDとパスワードをケルベロスサーバに送る
  2. ケルベロスサーバは、本人であることを認証した場合、TGT(チケット交付チケット)をユーザーに送る
  3. TGTを受け取ったユーザーは、TGS(チケット交付サーバ)にアクセスする
  4. TGSは受け取ったTGTを元に、対象サーバにアクセスするためのチケット(サービスチケット)をユーザーに送る
  5. ユーザーはサービスチケットを使って、対象サーバにアクセスする



TGSとサーバは、あらかじめ信頼関係を構築している必要があります。

信頼関係を構築している理由は、TGSが偽物だった場合に認証機能が成り立たないためです。


信頼関係を構築している範囲をレルムといいます。

信頼関係を結ぶために、両者の共通鍵を利用しています。

SAML

認証情報をマークアップ言語(タグ)で表す認証方式です。

Web技術と相性が良いため、広く使われています。

ドメイン間でのSSOを実現できます。

アサーションと呼ばれるXML形式の認証情報により、認証します。


アサーションには、「認証情報」「属性情報」「認可情報」が入っています。

このアサーションを、対象サーバに提示することで、認証できます。

引用:SAMLとは?SSO(シングルサインオン)認証の仕組み・メリット|BOXIL



サービスプロバイダ(SP)は、オンラインショップサイトなどのログイン先です。

IDプロバイダ(IdP)は、SSOサーバや認証サーバのことで、ユーザIDやパスワードが登録されているサーバです。

流れとしては次の通りです。

  1. ユーザーがSPにアクセスする
  2. 未ログインの場合は、SPがIdPへのリダイレクト指示を出す
  3. ユーザー(ブラウザ)はリダイレクト指示を元に、IdPにアクセスする
  4. IdPにて、ユーザーがユーザIDやパスワードを入力する
  5. IdPがアサーションを生成し、SPへのリダイレクト指示を出す
  6. ユーザー(ブラウザ)はリダイレクト指示を元に、SPにアクセスする(アサーションも一緒に)
  7. SPはリクエストに入っているアサーションを検証し、本物である場合にログインが完了する。



リダイレクトとは、ページを自動転送システムのことです。

「○秒後に自動ページ遷移します」と表示されることがあるね。


リダイレクト指示が出ると、ブラウザが勝手にリダイレクト先にアクセスし直します。

SAMLのメリットは何でしょうか?


SAMLのメリットは、SPとIdPの通信は必ずユーザー(ブラウザ)を介することです。

SPとIdPが直接通信することはないため、同一のネットワークに存在している必要がありません。


SAMLのリスクはなんだろう?


もし、ブラウザに届いた時点でアサーションが改ざんされた場合、想定外のアクセスを許可してしまう恐れがあります。

アサーションを生成した段階で、発行元であるIdPの署名をつけておくことで、アサーションの改ざんの検出する必要があります。


また、SPとIdPは直接通信しないものの、信頼関係の構築は必要です。

信頼がおけるIdPが生成したアサーションでないと、正しい認証ができないからだね。