ID フェデレーションについて調べたところ、以下の4点で混乱したのでまとめることにしました。
- ID フェデレーションって何?
- ID フェデレーションと SSO の違いって何?
- OAuth 2.0 と OpenID Connect(OIDC) と SAML の違いって何?
- 結局どうやってフェデレーションするの?
なお、SSO について学習する場合は、以下の順で学習することをおすすめします。
- 【SSO (シングルサインオン) 入門1】ID フェデレーションとは ←イマココ
- 【SSO (シングルサインオン) 入門2】OAuth 2.0 とは
- 【SSO (シングルサインオン) 入門3】OpenID Connect (OIDC) とは
- 【SSO (シングルサインオン) 入門4】Keycloak で SSO を実装
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.0 と OIDC の認証フローの違いは以下のとおりです。
- OpenID Connect (OIDC) は、アプリに証明書を渡すことで認証
- OAuth 2.0 は、アプリに鍵を渡すことでを認証
つまり、OAuth 2.0 では、アプリに悪意があれば非常に危険です。
そのため、認証に追加の仕様を加えた OIDC が生まれました。
SAML と OpenID Connect (OIDC) の違い
SAML と OpenID Connect の違いをまとめると以下のとおりです。
SAML | OpenID Connect | |
---|---|---|
認証結果の伝送方法 | アサーション | ID トークン |
データ形式 | XML | JSON |
普及状況 | 今までのスタンダード | 次世代のスタンダード |
関連記事
SSO (シングルサインオン) 入門記事の続きは以下のとおりです。
- 【SSO (シングルサインオン) 入門1】ID フェデレーションとは ←イマココ
- 【SSO (シングルサインオン) 入門2】OAuth 2.0 とは
- 【SSO (シングルサインオン) 入門3】OpenID Connect (OIDC) とは
- 【SSO (シングルサインオン) 入門4】Keycloak で SSO を実装
参考資料
OAuth 2.0 + OpenID Connect をフルスクラッチした人の記事です。とてもわかりやすいので読みましょう。