【入門】ID フェデレーションとは?わかりやすく解説

ID フェデレーションについて調べたところ、以下の4点で混乱したのでまとめることにしました。

  • ID フェデレーションって何?
  • ID フェデレーションと SSO の違いって何?
  • OAuth 2.0OpenID Connect(OIDC) と SAML の違いって何?
  • 結局どうやってフェデレーションするの?

なお、SSO について学習する場合は、以下の順で学習することをおすすめします。

スポンサーリンク

ID フェデレーションとは

ID フェデレーションとは、外部の認証サーバーを利用して、サインイン (ログイン) する技術です。

ID フェデレーションの例

ID フェデレーションを利用すると、Twitter や Google などの認証サーバーを利用して、自分で開発したアプリケーションにサインイン (ログイン) できます。

ID フェデレーションと SSO(シングルサインオン)の違い

SSO (シングルサインオン) とは、1度のサインインで、複数のアプリが利用可能になる仕組みです。

ID フェデレーションSSO(シングルサインオン)を実現する方式の1つです。

SSO(シングルサインオン)を実現する方式には、ID フェデレーションを含む次の4種類が存在します。

SSO の方式方式の説明
フェデレーション方式外部の認証サーバー (IdP) で認証しクライアントに認証結果を返す
クライアントがアプリ (SP) に認証結果を渡し、アプリを利用
リバースプロキシ方式前段のリバースプロキシサーバー認証。後段のアプリは認証無し
エージェント方式認証済みか否かについて、アプリに組み込んだエージェントが認証サーバーに問い合わせ
代理認証方式代理認証サーバーがユーザーの代わりに自動サインインをする
ユーザーは事前に代理認証サーバーにサインインする必要あり

上記の通り、フェデレーション方式は外部の認証サーバー (IdP) を利用するための技術です。

IdP, SP とは

IdP、SP はそれぞれ以下の意味を表します。

用語説明
Identity Provider (IdP)・ID (ユーザー名やパスワード等) を管理する認証サーバー
認証に成功すると、クライアントに認証結果を返す
Service Provider (SP)IdP の認証結果をもとにサービスを提供するアプリケーション

認可と認証の違い

認可と認証はよく似た言葉ですが、意味が異なるので注意してください。

認可(Authorization・AuthZ)認証(Authentication・AuthN)
目的権限を付与ユーザーを識別および検証
利用例アプリケーションの閲覧権限の付与に利用ログインに利用
具体例
プロトコルOAuth 2.0
・SAML
OpenID Connect (OIDC)
・SAML
利用するトークンアクセストークン (OAuth 2.0)
アサーション (SMAL)
ID トークン (OIDC)
アサーション (SAML)
スポンサーリンク

ID フェデレーションの仕組み

ID フェデレーションでは、以下のいずれかのプロトコルを利用して認証結果を伝送することで SSO を実現します。

SAML とは

SAML (Security Assertion Markup Language) とは、XML 形式の認証結果を送受信する仕様です。

SAML は SAML アサーションを利用して認証結果を送受信します。

SAML アサーションとは

アサーションとは、認証、属性、権限の認可をXMLで表したものです。

アサーションのステートメント説明
認証ステートメント
(Authentication statements)
認証情報に関するステートメント認証時刻
認証が行われた場所
属性ステートメント
(Attribute statements)
属性に関するステートメント・名前
・年齢
・性別
認可決定ステートメント
(Authorization decision statements)
認可に関するステートメントファイルへのアクセス権限
・サービスへのアクセス権限
許可・属性・認可の対象をサブジェクトという
SAML アサーションの例: https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html

OpenID Connect (OIDC) とは

OpenID Connect (OIDC) とは、JSON 形式の認証結果を送受信する仕様です。

OpenID Connect (OIDC) の詳細については以下の記事をご覧ください。

OAuth 2.0 と OpenID Connect (OIDC) の違い

OpenID Connect (OIDC) は、OAuth 2.0認証の追加仕様を加えたものです。

(Identity, Authentication) + OAuth 2.0 = OpenID Connect

https://openid.net/connect/faq/

OAuth 2.0OIDC認証フローの違いは以下のとおりです。

https://en.wikipedia.org/wiki/OAuth

つまり、OAuth 2.0 では、アプリに悪意があれば非常に危険です。

そのため、認証に追加の仕様を加えた OIDC が生まれました。

SAML と OpenID Connect (OIDC) の違い

SAML と OpenID Connect の違いをまとめると以下のとおりです。

SAMLOpenID Connect
認証結果の伝送方法アサーションID トークン
データ形式XMLJSON
普及状況今までのスタンダード次世代のスタンダード
スポンサーリンク

関連記事

SSO (シングルサインオン) 入門記事の続きは以下のとおりです。


参考資料

Authlib: Python Authentication

OAuth 2.0 + OpenID Connect をフルスクラッチした人の記事です。とてもわかりやすいので読みましょう。

一番分かりやすい OpenID Connect の説明 - Qiita
はじめに過去三年間、技術者ではない方々に OpenID Connect(オープンアイディー・コネクト)の説明を繰り返してきました※1。 その結果、OpenID Connect をかなり分かりやすく…
一番分かりやすい OAuth の説明 - Qiita
はじめに過去三年間、技術者ではない方々に OAuth(オーオース)の説明を繰り返してきました※1,※2。その結果、OAuth をかなり分かりやすく説明することができるようになりました。この記事では…