Security+ Academy · レッスン

フェデレーションID:SAML、OAuth、OpenID Connect

SSO、SAMLアサーション、OAuth 2.0フロー、OpenID Connectトークンによって、ユーザーが多くのアプリケーションで一度だけ安全に認証できる仕組みを学びます。

レッスン 4/413 ステップ

「フェデレーションID:SAML、OAuth、OpenID Connect」はCoddyKit上の無料Security+ Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSecurity+ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Security+ Academyコースには全4レッスンが含まれています。

ドメインをまたぐIDの課題

現代のエンタープライズ環境では、従業員はクラウドアプリ、SaaSツール、パートナーポータル、社内システムなど、数多くのアプリケーションにアクセスする必要があります。これらはそれぞれ異なる組織によって管理されている場合があります。アプリケーションごとに個別のアカウントを作成・管理する方法は、安全性が低く(認証情報が増えすぎるため)、効率的でもありません。フェデレーションIDは、Identity Provider(IdP)(信頼できる権威あるID情報のソース)がユーザーを認証し、その認証済みIDを組織の境界を越えてService Provider(SP)と共有できるようにすることで、この問題を解決します。ユーザーは一度認証するだけで、認証情報を再入力せずに複数のシステムへアクセスできます。

シングルサインオン(SSO)の基礎

シングルサインオン(SSO)を使用すると、ユーザーは一度認証するだけで、セッション中に再認証することなく複数のアプリケーションへアクセスできます。ユーザーはIdentity Provider(企業のActive Directory、Okta、Azure AD)にログインし、セッショントークンまたはアサーションを受け取り、アクセスする各Service Providerにそのトークンを提示します。SSOは、ユーザーが管理する必要のあるパスワードの数を減らして(使い回しも減らします)、認証ポリシーを一元的に適用できるようにし、IdPレベルでアカウントを無効化した際には、統合されたすべてのアプリケーションから直ちにアクセスを取り消せるため、セキュリティを向上させます。

SAML 2.0:XMLベースのフェデレーション

SAML(Security Assertion Markup Language)2.0は、Identity ProviderとService Providerの間で認証データおよび認可データを交換するための、XMLベースのオープン標準です。SAMLのフローは次のとおりです。(1) ユーザーがService Provider(例:Salesforce)にアクセスします。(2) SPがIdentity Provider(例:Okta)へリダイレクトします。(3) ユーザーがIdPで認証します。(4) IdPが、ユーザーのIDと属性を含む署名済みXMLのSAMLアサーションを発行します。(5) アサーションがSPに返されます。(6) SPがIdPの公開鍵を使用してアサーションの署名を検証し、アクセスを許可します。SAMLは、WebアプリケーションのエンタープライズSSOで広く使用されています。

<!-- Simplified SAML Assertion structure -->
<saml:Assertion xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'
  IssueInstant='2026-06-21T10:00:00Z'
  ID='_abc123'>
  <saml:Issuer>https://idp.company.com</saml:Issuer>
  <saml:Subject>
    <saml:NameID>alice@company.com</saml:NameID>
  </saml:Subject>
  <saml:Conditions NotBefore='2026-06-21T10:00:00Z'
                   NotOnOrAfter='2026-06-21T10:05:00Z'/>
  <saml:AttributeStatement>
    <saml:Attribute Name='groups'>
      <saml:AttributeValue>Sales</saml:AttributeValue>
    </saml:Attribute>
  </saml:AttributeStatement>
  <!-- Signature verifies IdP signed this assertion -->
</saml:Assertion>

SAMLのロール:IdP、SP、プリンシパル

SAMLフェデレーションには、3者が関与します。プリンシパルは、アクセスを求めるユーザー(またはシステム)であり、認証プロセスを開始します。Identity Provider(IdP)は、プリンシパルを認証してアサーションを発行する、権威あるID情報のソースです。例としてMicrosoft Azure AD、Okta、Ping Identity、ADFSがあります。Service Provider(SP)はアサーションを受け取り、それに基づいてアクセスを許可します。例としてSalesforce、Google Workspace、AWS、およびSAML対応アプリケーションがあります。SPとIdPは、互いのエンドポイントURLと署名証明書を含むメタデータを事前に交換して、信頼関係を確立します。

OAuth 2.0:認可フレームワーク

OAuth 2.0は、ユーザーの認証情報を公開せずに、サードパーティアプリケーションがユーザーに代わってリソースへアクセスできるようにする認可フレームワークです(認証プロトコルではありません)。典型的な使用例は、「この写真編集アプリにGoogleフォトへのアクセスを許可しますか」です。OAuth 2.0には、Resource Owner(ユーザー)、Client(サードパーティアプリ)、Authorization Server(トークンを発行)、Resource Server(保護されたリソースをホスト)という4つのロールがあります。ユーザーがクライアントを認可すると、クライアントはアクセストークンを受け取り、それをResource Serverに提示します。ユーザーの実際のパスワードを知る必要はありません。

OAuth 2.0認可コードフロー

認可コードフローは、Webアプリケーションで使用できるOAuth 2.0フローの中で最も安全なものです。フローは次のとおりです。(1) クライアントが、要求するスコープを付けてユーザーをAuthorization Serverへリダイレクトします。(2) ユーザーがAuthorization Serverで認証し、同意します。(3) Authorization Serverが、短時間だけ有効な認可コードを付けてユーザーをリダイレクトします。(4) クライアントが、クライアント認証情報を使用したサーバー間通信によって、コードをアクセストークン(オプションでリフレッシュトークンも)と交換します。(5) クライアントがアクセストークンを使用してResource Serverを呼び出します。コードの交換はサーバー側で行われるため、アクセストークンがブラウザーの履歴やログに露出することを防げます。

# OAuth 2.0 Authorization Code Flow (step 3-4)
# Step 3: User is redirected back to client with auth code
# GET https://app.example.com/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

# Step 4: Client exchanges code for access token (server-to-server)
curl -X POST https://auth.example.com/oauth2/token \
  -d 'grant_type=authorization_code' \
  -d 'code=SplxlOBeZQQYbYS6WxSbIA' \
  -d 'redirect_uri=https://app.example.com/callback' \
  -d 'client_id=client_abc' \
  -d 'client_secret=secret_xyz'
# Response: {'access_token': 'MTQ0Nj...', 'token_type': 'Bearer', 'expires_in': 3600}

OpenID Connect:OAuthに認証を追加

OpenID Connect(OIDC)は、OAuth 2.0上に構築された認証レイヤーです。OAuthが提供するのは認可だけです(アクセストークンによってクライアントが実行できることを証明します)。一方、OIDCは認証を追加し、IDトークンによってユーザーが誰であるかを証明します。OIDCはOAuthフローにopenidスコープを追加し、アクセストークンとともに署名済みのJWT(JSON Web Token)IDトークンを返します。IDトークンには、ユーザーを識別するクレーム(name、email、sub[subject identifier])が含まれます。OIDCは現在、コンシューマー向けSSOで主流のプロトコルです。「Sign in with Google/Apple/Microsoft」ボタンはすべてOIDCを使用しています。

# OIDC ID Token is a JWT with three base64url-encoded parts:
# header.payload.signature

# Decoded payload example:
# {
#   'iss': 'https://accounts.google.com',
#   'sub': '110169484474386276334',
#   'aud': 'client_id_abc123',
#   'exp': 1750000000,
#   'iat': 1749996400,
#   'email': 'alice@gmail.com',
#   'name': 'Alice Smith',
#   'email_verified': true
# }

# The signature is verified with the IdP's public key (from JWKS endpoint)

JWT:最新の認証におけるトークン

JSON Web Token(JWT)は、当事者間でクレームを表現するための、コンパクトでURLセーフな形式です。JWTは、base64urlでエンコードされた3つの部分をドットで区切った構造になっています。Header(アルゴリズムとトークン種別)、Payload(iss、sub、aud、exp、iat、およびカスタムクレームなどのクレーム)、Signature(トークンの完全性を検証する暗号学的署名)です。JWTは自己完結型であるため、Resource ServerはAuthorization Serverに問い合わせなくても検証でき、パフォーマンスが向上し、ステートレスアーキテクチャが可能になります。重要なセキュリティ要件は、JWTの署名を必ず検証し、exp(有効期限)とaud(対象者)のクレームを確認することです。

# Decode a JWT (header and payload are just base64 encoded)
import base64, json

jwt = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiZXhwIjoxNzUwMDAwMDAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
parts = jwt.split('.')
print('Header:', json.loads(base64.b64decode(parts[0] + '==')))
print('Payload:', json.loads(base64.b64decode(parts[1] + '==')))
# Signature (parts[2]) must be verified with IdP public key!

SAMLとOAuthとOIDC:どれをいつ使うか

各標準をどの場面で使用するかを理解することは、Security+試験において非常に重要です。SAML 2.0:Webアプリケーション向けのエンタープライズSSOで、ブラウザー経由のフローとXMLアサーションを使用します。古い技術ですが、エンタープライズ環境で広く導入されています。OAuth 2.0:API認可に使用し、サードパーティアプリにリソースへの限定的なアクセスを許可します。ユーザーを直接認証するものではありません。OIDC:OAuth 2.0上に構築された、コンシューマー向けおよび最新のエンタープライズ認証(SSO)に使用されます。ユーザーを識別するJWT IDトークンを返します。実際には、エンタープライズ環境ではアプリケーションSSOにSAMLを、APIやモバイルの認証にOIDCを使用することがよくあります。最新のクラウドネイティブ環境では、JSON/JWT形式でモバイル対応にも優れていることから、SAMLよりOIDCが好まれます。

フェデレーションに対する攻撃ベクトル

フェデレーションIDシステムには、固有の攻撃ベクトルがあります。アサーションリプレイ攻撃:攻撃者がSAMLアサーションを傍受し、再送してアクセスを取得します。アサーションの有効期間を短くし、1回限り使用するアサーションIDを用いることで軽減できます。XML署名ラッピング(XSW):SAMLでは、攻撃者が署名済みXMLを操作し、元のコンテンツに対する署名を有効なままにしてクレームを変更できる場合があります。JWTアルゴリズム混同:サーバーがRS256(非対称)とHS256(対称)の両方のアルゴリズムを受け入れる場合、攻撃者はサーバーの公開鍵をHS256のHMACシークレットとして使用してJWTを偽造できます。アルゴリズムのヘッダーが想定されるアルゴリズムと一致することを必ず検証してください。オープンリダイレクター:リダイレクトによって攻撃者が管理するサイトへトークンが窃取されるのを防ぐため、OAuthのリダイレクトURIは完全一致で検証する必要があります。

ディレクトリフェデレーションとSCIM

エンタープライズIDフェデレーションでは、システム間でユーザーIDデータを同期する必要があることがよくあります。SCIM(System for Cross-domain Identity Management)は、Identity Providerと接続されたService Providerの間で、ユーザーのプロビジョニングとデプロビジョニングを自動化するためのREST API標準です。新しい従業員がAzure AD(IdP)に追加されると、SCIMによってSalesforce、Slack、GitHubなど、SCIM互換アプリにその従業員のアカウントが自動的に作成されます。従業員が退職すると、SCIMはすべてのアカウントを同時に無効化します。これにより、休眠アカウントが悪用される可能性のある期間をなくせます。SCIMは、SSOプロトコル(SAML/OIDC)が扱わないライフサイクル管理を担うことで、SSOプロトコルを補完します。

理解度チェック

このレッスンで扱ったCompTIA Security+(SY0-701)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、次のことを学びました。SAML 2.0は、エンタープライズ環境でブラウザーを介したSSOを実現するためにXMLアサーションを使用します。OAuth 2.0は、APIアクセスの委任に使用する認可フレームワークです。OpenID Connectは、OAuth上に認証(JWT IDトークン)を追加します。SCIMは、フェデレーションシステム間のIDライフサイクル管理を自動化します。これで認証と認可のコースは完了です。次はネットワークセキュリティの基礎について説明します。

無料で開始

AI チューターと学ぶ Security+ Academy — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「フェデレーションID:SAML、OAuth、OpenID Connect」レッスンは無料ですか?

はい。「フェデレーションID:SAML、OAuth、OpenID Connect」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Security+ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Security+ Academyコースには全4レッスンが含まれています。

「フェデレーションID:SAML、OAuth、OpenID Connect」で何を学びますか?

SSO、SAMLアサーション、OAuth 2.0フロー、OpenID Connectトークンによって、ユーザーが多くのアプリケーションで一度だけ安全に認証できる仕組みを学びます。 ブラウザで直接実行するハンズオンコードでSecurity+ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Security+ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSecurity+ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「フェデレーションID:SAML、OAuth、OpenID Connect」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSecurity+ Academyレッスンでコードを書いて実行できますか?

はい。すべてのSecurity+ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パスワードポリシーと多要素認証
  2. 生体認証とトークンベース認証
  3. 認可モデル:RBAC、MAC、DAC
  4. フェデレーションID:SAML、OAuth、OpenID Connect
← Security+ Academyに戻る