SSO、SAMLに関する説明
Overview
皆さんは、色んなのサイトを利用すると、以下のことを経験したことがあると思う。
本!人!確!認!
では、本人認証とは?
地球ではそれぞれの人が存在、個人の性質があると思う。
しかし、何を基準にして個人だと判断できるだろうか?
外面的な部分で判断できますが、住所、Eメール、電話番号、名前など多様に存在するだろう。
これらを個人情報あるいは個人データと呼ぶ。
そのような情報を用いて特定の者が本人であることを証明するのが本人認証であるということである。
SSO(Single Sign On)
SSOとは
一度のユーザ認証処理によって、独立した複数のソフトウェアシステム上のリソースが利用可能になる機能または環境である。シングルサインオンによって、ユーザはシステムごとにユーザIDとパスワードの組を入力する必要がなくなる。
代表的に以下のものがある
- Google Accounts
- Facebook Login
SSOを構築することは色んな方でできるが、代表的なモデル式は二つがある。
対象アプリケーションの認証方式を変更することが困難な場合によく使用
対象アプリケーションの認証方式を全く変更せず、ユーザの対象アプリケーション認証情報をエージェントが管理してユーザの代わりにログオンする方式
統合認証を遂行するところで認証を受け、対象アプリケーションで伝達するトークン(Token)を発給を受ける。
対象アプリケーションに使用者が接近する時トークンを自動的に転送し、対象アプリケーションが使用者を確認できるようにする方式
3. Delegation & Propagation Model(混在)
ウェブ環境だとしても、Propagation方式が全て適用されるわけではない。
特にウェブアプリケーションの変更が全く不可能で、ユーザー統合が難しい場合、Delegation方式を使用することになる。
また、対象アプリケーションが多く、アプリケーションの特性が多様な場合、各アプリケーションにDelegation方式とPropagation方式を混用してシステム全体のSSOを構成する
そうしたらSSOシステムはどうやって具現できるか?
代表的に使っているは、以下の三つが存在する。
- SAML
- OAuth
- OIDC
今回ではSAMLに関して説明をする。
SAMLとは
Security Assertion Markup Language は、特にアイデンティティプロバイダーとサービスプロバイダーの間で認証および認可データを交換するための公開標準である。SAML は、セキュリティアサーション のための XML ベースのマークアップ言語である。
代表的にSAMLに関して対応できるサービスは以下のものがある
- Okta
- OneLogin
- ADFS
SAMLでは、3つの役割があって、重点的に理解すればよい。
- User:クライアント
- Service Povider サービス プロバイダー
- Identity Provider 認証情報提供者
SAML認証フローは上のそれぞれを役割を利用して使用されます。
SAML認証フロー
1. サービス要請
- ユーザがサービスにアクセス、SPは当該ユーザが認証の有無をチェックする。
2. SSOサービス遷移
- 認証されていないユーザーの場合は、認証要求を作成してクライアントに転送する。
- SPでSAMLRequestを生成してユーザーに転送する。
- SPはIDPと直接接続されず、クライアントのブラウザからIDPへSAMLRequestをredirectする。
3. SSOサービス要請(リクエスト)
- IDPはSAMLRequestをパーシングし、ユーザー認証を進行する。
- 認証方式はパスワードPKIなど多様に使用する。
4. SAML応答
- 認証が成功するとSAMLResponseを生成、 ユーザーのブラウザに転送する。
- SAMLResponseにはSAMLAssertionが格納される。(XML形式)
- IDPはウェブブラウゼSession Cokkieを設定、その情報はブラウザにキャッシュ
5. (POST)SAML応答転送
- ユーザはSPのACS(Assertion Consumer Service)のURL内にSAMLResponseをPOST形式で送信する。
6. サービス応答
- ACSはSAMLResponseを検証し、有効であればユーザーが要請したサービスでユーザーをForwardingする。
- ログインが成功する。
SAMLに関する長所と短所
長所
- アプリケーションとサービスにより簡単にログインすることはもちろん、ユーザーの生産性向上にも効果的
- 様々なログインを繰り返すとパスワードを簡単に忘れることができ、さらにはパスワードを紙に書いておいて資格証明の盗難リスクが増加、一つのユーザー名とパスワードだけ知っていればいい
- 資格情報が直接送信されるため、フィッシングやアイデンティティ奪取の可能性が最小限
- 開発コスト(専用認証方式と主に関連がある)を最小限に抑えるのにも効果的
- 各ユーザーを単一ディレクトリで管理するため、ユーザー管理が容易
短所
- SAMLRequest,SAMLResponseはXML形式であるためブラウザでのみ動作が可能である
- モバイルやNative Applicationには使用を推奨しない。
終わりに
ここまでSSOとSAMLは何なのかを説明をしました。
今後は、実査に構築して、実装する方法と開発過程を記載したいと思う。
(Ruby on Railsでログインする時にOneLoginでログインする作業を行う予定。)