分かりやすい!シングルサインオン(Single Sign-On / SSO)を説明します。

SSOは認証システムの手法のうちの一つです。

初めてSSOがリリースされたのは2011年になります。それからGoogleやAmazon、Facebookなどのソーシャルメディアのアカウントを使って特定のアプリ、例えばチケット販売、ストリーミングのアプリなどにログインできるようになりました。

このSSOが連携している場合は、メインの画面とは別にポップアップのウィンドウが表示されGoogleなどのログインで使えるプロバイダが選択できるようになります。

このおかけでユーザーはアプリケーションごとにアカウントを作成することなくGoogleなどの一つのアカウントで複数のアプリのアカウントにログインできるようになります。

SlackのSSOの例:下記画像参照

SSOの認証の手法

SSOではメインとして2つの方法が使われます。

①SAML( Security Assertion Markup Language )

②OpenID Connect

SAMLはXMLベースで作成されたテクノロジーになります。
OpenID Connect(オープンIDコネクト)はOAuth 2.0のフレームワークをベースに作成されたテクノロジーになります。OpenIDはJWT(JSON Web Token)を使いサービスとユーザー間でID(個人情報)を交換します。

SAMLについて

では下記のイメージ図を参考にしながらSMALの認証の流れを見ていきます。

①ユーザーがGmailなどのアプリにアクセスします。SAMLの概念ではGmailなどはサービスプロバイダと呼ばれます。

②Gmailにログインしたあと、GmailサーバーがSARをブラウザに返します。

③その後にブラウザがユーザーをIdP(SMAL認証を提供するプロバイダ)にリダイレクトします。例としてoktaやAuth0があげられます。

④IdPがポップアップなどでユーザーにログイン情報を入力させます。

⑤ユーザーがログインします。

⑥ユーザーがログインした後、IdPがSAMLリスポンスを作成してブラウザに返します。この流れをSAML Assertion(アサーション)といいます。SAML Assertion(認証トークン)は暗号化されたユーザ情報を含むXMLドキュメントになります。

上記のステップが完了すると、ブラウザがサインされたSAML Assertionをサービスプロバイダに送ります。

認証されたユーザーはアプリケーション内の保護されたデータにアクセスできるようになるということです。

Open IDの流れ

ではSAMLの流れが理解できたところで、Open IDの認証の流れを見てみましょう。

Open IDもSMALに似たプロトコル(手段)になります。しかしサインされたXMLを使う代わりにJWTを使います。

どちらの方法も主流であり、セキュリティ対策がされているので選ぶのはプログラマーの好みになると思います。

お疲れ様でした。