この記事は カオナビ Advent Calendar 2021 7日目です。
はじめに
はじめまして!7日目を担当します、カオナビの新卒2年目の別府です。よろしくお願いします!!
今回はSAMLのタスクを担当した際に、自分が調べた「SAMLってそもそも何?」という概念的な部分を自分の備忘録的な形で記事にしようと思います。
こんな方に読んでもらいたい
- SAMLってなんだ?という方
- 実装したことがあるが、SAMLとは何かを説明できない方
SAMLって何ですか?
そもそもSAMLってなんですか?というところですが、略さないで書くとSecurity Assertion Markup Language
です。
直訳するとセキュリティーを断定するマークアップ言語になります。私も勘違いしていたのですが、実はSAMLはマークアップ言語なのです。
ところが、色々なサイトをみてみると大体はXMLをベースにした標準規格と書かれていることが多いです。
XMLをベースにしたマークアップ言語だったらなるほどとなりますが標準規格ってなんやねん!となると思います。私もそう思いました。
ここがとてもややこしい点なのですが、SAMLはマークアップ言語と言いつつ実は通信プロトコルであるということです。
今回は深堀しませんが、Protocols, Bindings, Profiles, Metadataなどの色々な仕様が定義されています。
つまりSAMLとは
- 認証情報を安全にやり取りするための書式 + (通信する上でのお約束事) = SAML(実態はSAMLプロトコル)
ということになります。
SAMLのバージョン?
歴史を見てみるとSAMLには
- SAML 1.0
- SAML 1.1
- SAML 2.0
の3バージョンがあります。
ちなみに、現在はSAMLという単語はほぼSAML 2.0を指しますので、今回のSAMLとは?というのもSAML2.0のお話になります。
実はSAMLはSAML1.0が2002年11月に発行され、最新版のSAML2.0は2005年3月に発行されているというかなりレガシーな規格です。
IDaaSとIdPの違いは?
SAMLについて色々調べていたところ
とあるサイト...
おすすめIDaaS!
HENNGE ONE, One Login, Okta, ...またまたとあるサイト...
おすすめIdP!
HENNGE ONE, One Login, Okta, ...
と書いてあり、IDaaSとIdPの違いってなんだろう?と思い調べてみました!
まずは恒例の略さずに言い換えてみます
- IdP(Identity Provider)
- IDaaS(Identity as a Service)
ふむふむ、違いはアイデンティティ情報をProviderするかas a Serviceするかの違いだとわかりますね。
この話をまとめると
- IDaaSはアイデンティティ情報をサービスとして提供するもの
- IdPはアイデンティティ情報を提供するもの
あれ?同じことを言ってますね。ということはIDaaS = IdPということでいいのでしょうか?
そう考えるのはちょっと待ってください、実はIDaaSはSAMLが非対応のアプリケーションにもSSOが可能という前提が実はあります。
そのため、具体的なサービスをあげるとCognito, Firebase Authentication, Auth0なども該当します。
なので私が導き出した答えは
- アイデンティティ情報をクラウド経由で提供するものの名称をSSO全体ではIDaaSと呼び、IdPはSAMLの時のみ使える限定的な用語
です!
まとめ
今回、特に私が混乱した「SAMLってマークアップ言語じゃないのかよ!」と「IDaaSとIdPの違いってなんだよ!」という部分を改めて文字に起こすことによってより深く調べることができSAMLマスターへの道を一歩前進することが出来ました。
SAML以外にも実装はできるけど概念は全然知らないというものがまだまだ沢山あるので、より知識を深堀して聞かれたときに堂々と答えられるエンジニアになれるよう精進していきます!
お読みいただきありがとうございました!!