個人ブログのようなものです。とくにジャンルはありません。
広告枠
記事の概要
作成日:2019-11-04
最終更新日:2019-11-04
記事の文字数:3450
シングルサインオン/SAML認証について
概要

シングルサインオンについて調べたのでメモ。

シングルサインオンとは

まず念のためシングルサインオンとは何か?から。

通常のログインは
「①自分が使いたいシステムAで認証して」
「②同じく自分が使いたいシステムAでログインする」
と思う。

図で表すと以下の通り。
サービスプロバイダが「自分が使いたいシステム」ということ。

画像クリックで等倍


ただしこれだと、使っているシステムが「システムA」「システムB」「システムC」と、
増えていくとそれらがすべて毎日使っているシステムだったら、毎日最低3回ログインする必要があることになる。

それだけならまだしも、これらのシステムが3カ月に1回、6カ月に1回など
異なるタイミングでパスワードの変更を求めるようなシステムだった場合、
パスワードの管理が非常にめんどくさいことも問題になる。

ログインポリシーもそれぞれで異なるため、その管理も面倒になる。

それらを解決するために生まれたのがシングルサインオン

通常のログインと異なり、
「①認証用のシステムAで認証して」
「②自分が使いたいシステムBでログインする」
という方式を使っている。

図で表すとこうなる。
IDプロバイダが「認証用のシステム」

画像クリックで等倍


これだけだとパッとしないかもしれないが、
サービスプロバイダの数を増やしてみるとシングルサインオンっぽくなる。

画像クリックで等倍


こうすれば、パスワードもログインポリシーもIDプロバイダで一元管理できるし、毎日のログインも最低1回で済む。

これがシングルサインオンでそのメリットである。

SAML認証とは

上の説明がシングルサインオンの説明。
そしてそのシングルサインオンの時に使われる認証方法の一つが、SAML認証。

SAML認証の最大の特徴は「異なるドメイン間で容易に認証用メッセージのやり取りが行えること」らしい。
これは後述する通り、サービスプロバイダとIDプロバイダが直接メッセージのやり取りをすることはなく、
クライアントを介して行っているためらしい。

そのため社内認証システムとクラウドシステムの時によく使われるらしい。

SP initiatedフローとIdP initiatedフロー

SAML認証には「SP initiatedフロー」「IdP initiatedフロー」の二つがある。

より複雑なのは「SP initiatedフロー」の方。
というより、「SP initiatedフロー」の前の方の手順が無いのが、「IdP initiatedフロー」。

内部的な話で言うと、
「SP initiatedフロー」は「AuthnRequest」から始まるフロー、
「IdP initiatedフロー」は「SAMLResponse」から始まるフロー
ということでいいと思う。

それぞれのフローの概要は以下の通り。
(あくまで一例)

SP initiatedフロー
画像クリックで等倍


IdP initiatedフロー
画像クリックで等倍


これだけだとパッとしないと思うが、これをベースに後々の説明をしていく。

SP initiatedフロー

1.SP initiatedフローを呼ぶ

まず最初にやらないといけないこととして、何らかの方法でSAML認証を起動しないといけない。
方法はいろいろあると思うが「URLを開くと起動する」「ボタンを押すと起動する」などがある。

2.AuthnRequestをIDプロバイダに送る

AuthnRequestは、IDプロバイダに認証を依頼するためのもので、ここの中に認証する際の約束事も記載されているらしい。
またAuthnRequestだけでなく、「RelayState」、「電子署名」、「ハッシュ化アルゴリズム」なども送られているらしい。
RelayStateとは、SAML認証完了後、どのページ(URL)を開くかを記載したもの。

3、4.IDプロバイダが認証画面をユーザに表示し、ユーザが認証する

これは普通に社内の認証システムが表示されるようなイメージ。
もちろんすでに認証(ログイン)済の場合、この手順は飛ばされる。

5.AuthnRequestを検証する

ここでAuthnRequestを見て、これから作るSAMLRequestの作り方をきめている。
電子署名の比較もやっている(はず)。

6.SAMLResponseをクライアントに返す

IDプロバイダがSAMLRequestと呼ばれるXMLメッセージを「クライアントに」返す。
厳密にいうと、それをそのまま返しているわけではなく、そのメッセージを含んだinputフォームを持ったHTMLをブラウザに返しているらしい。
この際SAMLRequestと一緒に「RelayState」も返している。

7.SAMLResponseをサービスプロバイダに送る

前の手順で送られてきたSAMLResponse(とRelayState)を「サービスプロバイダに」送る。

直接IDプロバイダからサービスプロバイダに送らず、クライアントを一回クッションにしているのがポイント。

8.SAMLResponseをサービスプロバイダが検証する

SAMLResponseをサービスプロバイダが検証する。
こっちでも電子署名の確認をしているらしい。

9.サービスプロバイダがログインセッションを返す

SAMLResponseに含まれるNameIDからログインするユーザを特定してセッションを返す。
同時に「RelayState」のページにクライアントをリダイレクトさせる。

IdP initiatedフロー

「SP initiatedフロー」の中で「2~5」の手順を省いたものが「IdP initiatedフロー」になると思う。
例えば社内ポータルサイトからリンクを開くと、サービスプロバイダの画面が開くなど。

SP initiatedフローでしかできないこと

思いつく限りでSP initiatedフローでしかできないことが2つある。
一つが、認証後に開くページを可変にすること

例えばメールにサービスプロバイダへのリンクが2つあって、
一つはAというデータへのリンク、もう一つはBというデータへのリンクがあった場合。

Aというデータへのリンクを押したときには、最終的にAというデータが開き、
Bというデータへのリンクを押したときには、最終的にBというデータが開くようにする、ということがSP initiatedフローではできる。
(サービスプロバイダからIDプロバイダへAuthnRequestを送るときに、RelayStateの値をそれぞれで変えればいいだけ)

IDプロバイダではこのように可変にするのはかなり難しいと思う。

もう一つがサービスプロバイダが独自のアプリを使っている場合のSAML認証
例えばIDプロバイダはIEやChromeなどの普通のWebブラウザを使うのに対して、サービスプロバイダが専用のアプリケーションだった場合。

IdP initiatedフローでは、ブラウザからSAML認証が始まるため、
セッションはブラウザに対して返されるはずなので、サービスプロバイダアプリケーション側の認証が行われない(はず)。

対してSP initiatedフローでは、サービスプロバイダのアプリケーションからSAMLを始めれば問題ない。
広告枠
関連ページ
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話 当然ですが本サイト…
ボタンを押す演出でCSSのtranslateYやtopを使用することの問題
ボタンを押す演出でCSSのtranslateYやtopを使用することの問題…
東京03のyoutubeチャンネルの概要ページの挙動がおかしい
東京03のyoutubeチャンネルの概要ページの挙動がおかしい…
Youtube Data APIでハンドルIDからユーザ情報を取得できない
Youtube Data APIでハンドルIDからユーザ情報を取得できない問題 結論から言うと現在…
ウマ娘まとめサイト(InoReader)
ウマ娘まとめサイト(InoReader)…
ウマ娘まとめサイト(Feedly)
ウマ娘まとめサイト(Feedly)…
Pythonを使ってinoreaderでサイトの更新情報を取得してみた
inoreader(イノリーダー?)が公開しているWeb APIを使用して、Pythonで自動的にサ…
Pythonを使ってFeedlyでサイトの更新情報を取得してみた
Pythonを使ってFeedlyでサイトの更新情報を取得してみた…
関連タグ
情報技術
管理人ツイート
最新ページ
怖い話まとめ
最初に 怪談系の怖い話を載せています。 特に設定部分は人の手が入ってますが、生成AI(ChatGP…
VRoidを使う前に絶対に表情はいじった方が良いと思うという話
デフォルトのVRoidの表情はすごいVRoidっぽい VRoidStudioでは「楽しい」「悲しい…
Twitter:【日替わり】一問一答自己紹介テーマ
Twitter:【日替わり】一問一答自己紹介テーマ 日替わりで簡単な質問が表示されます。 毎日つぶ…
アークナイツ-2024大感謝祭・秋商品-理性換算
概要 "2024大感謝祭・秋でお得な商品はどれか"というのを理性に換算して一覧化したものとなります…
本サイトについて
本サイトの概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報について…
制作物一覧
以下に移動しました こちらに移動しました。 …
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
NovelAI R18イラスト集
概要 『NovelAI』で作成したR18イラストの寄せ集めです。 全81枚。 R18なので満18歳…
NovelAI イラスト集
概要 『NovelAI』で作成したイラストの寄せ集めです。 別で失敗集も上げていますが、こちらはそ…
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
コメントログ
コメント投稿




本サイトのタグ一覧
タグを表示する NovelAIR18VRoidWebサイト作成Webツールアークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグホラーポケットタウン気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
広告枠