はじめに
この記事は株式会社digglueの新卒を含む社員向けの勉強会で利用した内容です。今回のテーマ「OAuth, SAML, OpenID Connect, SSOの違い」です。内容や表現の間違いなどがあるかもしれませんがご了承ください。
学習の目的
OAuthやActive Directoryなどのシングルサインオンの認証について理解を深めようとすると、SAML, OAuth, OpenID Connect, SSOなどの関連性のある用語が多く出てきて混乱します。今回はこれらの用語を比較し、認証についての理解を整理します。
SSO(シングルサインオンとは)
1度のログインにより複数のサービスはアクセスするための仕組みがSSOです。SAML, OAuth, OpenID ConnectはSSOを実現するためのプロトコルです。
SSOの目的はログイン回数を減らす他にも、ユーザーの削除などの認証情報の管理を一箇所に集約させる事ができます。
会社で退職者が出た場合などは、社内の全てのアプリケーションから社員情報を削除しなければ情報漏洩に繋がり得ますが、SSOを利用してユーザーを管理していれば手間が少なくなるだけでなく削除漏れもなくなるなど大きなメリットがあります。
OAuth, OpenID Connect, SAML
これらは全てSSOを実現するためのプロトコルです。 これらの差異を理解するために、まず認可と認証の違いを説明します。
認証(Authentication)と認可(Authorization)の違い
認証とは誰であるかを特定することで、認可とは権限を与えることです。
例えば銀行口座の開設などで本人確認のために保険証や免許証が必要になります。これが認証です。
また、車の運転が可能にであるとみなされるには保険証ではなく免許証が必要です。これが認可です。
OAuth, OpenID Connect, SAMLの違い
この中で、OAuthは認可を管理するためのプロトコルで、SAMLとOpenID Connectは認証を管理するためのプロトコルです。
また、OpenID ConnectはOAuthを拡張した規格です。
何故OAuthに加えてOpenID Connectが必要か。
認可のプロセスではじめに認証も含まれるため、認可と別に認証は不要なのではないかと考えるかもしれません。
しかし、認可情報は潜在的に流出してしまう可能性をひめています。
銀行口座の例で言うとクレジットカードを発行する際には本人確認が必要ですが、一度発行してしまったクレジットカードを紛失してしまうと他人に利用されてしまう可能性があります。
そのため、大きな金額を利用する際は署名など事後的に本人確認が可能となるプロセスが求められます。
運転免許証でも免許証を持っていくる事(認可)だけでなく顔写真が本人と一致している事(認証)も同時に必要になってきます。
このような認可(OAuth)の問題に対処するのがOpenID Connectです。
したがって、厳密にはOAuthを認証に利用するのは間違いです。また、OpenID ConnectはOAuthと共に利用されるため、OpenID Connectが認証と認可を合わせたものという間違った理解もよくあります。
正しくはOAuthは認可のプロトコルで、認証のプロトコルがOpen ID Connectです。
OAuthとSAMLの違い
SAMLは複雑な権限管理を扱う事ができましたが、OAuthはGoogleやTwitterがSNSの認証用途で開発した比較的簡易なプロトコルです。
OpenID ConnectとSAMLの違い
OpenID ConnectとSAMLはどちらも認証のためのプロトコルですが、発展の経緯やプロトコルの形式の違いから利用しているサービスが異なっています。
OpenID ConnectはOAuthの拡張規格のためSNSのOAuth認証と同時に利用され、SAMLはActive Directory Federation Services (ADFS) などに利用されています。
Links
- 概要をわかりたい人のためのAzure Active Directory(Azure AD)の基本
- What the Heck is OAuth?
- OpenID Connect
- User Authentication with OAuth 2.0
人材募集!
株式会社digglueではコンサルタント及びエンジニアを募集しています。
ブロックチェーンに関して、既によく理解している方だけでなく、これから学びたい方、仕事として実績を積みたい方、将来を考えてテクノロジーに触れておきたい方などでも大歓迎です。
ビジョン・ミッションなどに関しては、こちらのnote(digglueはどこへ向かうか) を参照ください。
ご質問・応募はコンタクトフォームかinfo@digglue.comまでご連絡ください。