Okta
オクタ
SAMLとは何か
1. SAMLとは? — 基本を押さえる
会社で働いていると、毎日いくつものクラウドサービスを使います。サービスごとに別々のID・パスワードを管理するのは大変なので、多くの企業は Okta のような認証サービス(IdP)にまず一度ログインし、そこから各サービスへ入れるようにしています。SAML(サムル:Security Assertion Markup Language)は、この「まとめてログイン」を裏側で成り立たせている共通ルール(プロトコル)の一つです。本記事では、代表的な認証サービスである Okta を例に説明します。
〔「SSO=SAML」ではありません〕
SSOやID連携は「やりたいこと(目的)」で、SAMLはそれを実現する「手段」の一つです。同じ目的はOIDC(OpenID Connect)やWS-Federationでも実現できます(第5章で比較します)。
図:SSOとSAMLの関係(目的と手段)
SAMLはOASISが策定した標準で、いま広く使われているのはバージョン2.0(SAML 2.0)です。認証の情報はXML(タグで構造を表す文字データの形式)で記述します。
SAMLが実現する2つの用途
- シングルサインオン(SSO) / Single Sign-On
一度の認証で、複数のサービスをログインし直さずに使い続けられる状態です。例:Oktaに一度ログインすれば、SlackもSalesforceも再ログインなしで使えます。 - フェデレーテッドID/ID連携 / Federated Identity
会社をまたいでIDを「信頼」で共有する仕組みです。別の組織で管理・認証されているユーザーを、自組織のサービスがそのまま受け入れられます。
登場人物は3つ
SAMLのやり取りは、次の3者で成り立ちます。
- IdP — Identity Provider(アイデンティティプロバイダー)
本人確認をして「この人は本物です」と保証し、証明(アサーション)を発行する側です。例:Okta、Microsoft Entra ID。 - SP — Service Provider(サービスプロバイダー)
ユーザーが使いたいサービス側です。自分では本人確認をせず、IdPの保証を信じてアクセスを許可します。例:Slack、Salesforce。 - ユーザー(ブラウザ) / User
本人です。SPとIdPは直接通信せず、必ずこのユーザーのブラウザを介してやり取りします。
SAMLアサーション(IdPが発行する証明)
IdPが本人確認を終えると、「この人は確かに本物で、こういう人です」という証明を発行します。これが SAMLアサーション(assertion=断言・主張)です。SPはこのアサーションを検証し、ユーザーのアクセスを許可します。改ざんを防ぐため、アサーションにはIdPのデジタル署名が付きます。
登場人物と信頼関係のイメージ
ここまでの3者の関係を1枚にまとめると、次のようになります。SPとIdPはあらかじめ信頼関係(証明書やメタデータの交換)を結んでおき、実際のログインではユーザーのブラウザがアサーションを運びます。用語(AuthnRequest・ACS URL など)は、次章のフローで登場したときにその場で説明します。
図:SAMLの登場人物と信頼関係
2. 認証の流れとOktaの役割
では、実際にどんな順番でログインが進むのかを見てみましょう。まず、前提を1つだけ述べます。
〔前提:SPとIdPは直接話さない〕
SPとIdPは直接通信せず、すべてのメッセージはユーザーのブラウザのリダイレクト(自動転送)経由で運ばれます。互いがネットワークでつながらなくても連携できる、SAMLの重要な設計です。
フローには、どちらから始まるかで2種類あります。
① SP起点(SP-initiated)
ユーザーがまずアプリを開こうとして始まるパターンで、企業のSSOの大半がこれです。例:ブラウザのブックマークからSalesforceを開くと、Oktaのログイン画面へ飛び、認証後にSalesforceへ戻ります。
図:SP起点(SP-initiated)サインインフロー
図の番号と本文の番号は対応しています(①~⑧)。
- アプリにアクセス
ユーザーが保護されたページを開きます。アプリ(SP)は「まだログインしていない」と判断します。 - IdPへリダイレクト(AuthnRequest付き)
アプリがAuthnRequest(確認のお願い)を作り、ブラウザをOkta(IdP)へ転送するよう指示します。 - IdPのサインインページにリダイレクト
ブラウザがOkta(IdP)のSSO URLへ移動し、ログイン画面が表示されます。 - ユーザー認証(ID+PW / MFA)
ユーザーがOktaでID・パスワードの入力や、MFA(多要素認証)を行います。 - SAMLアサーション(署名付きXML)
本人確認に成功すると、Oktaはアサーションを作り、署名を付けてブラウザに返します。 - アサーションをACS URLにPOST
ブラウザがアサーションを、アプリのACS URL(アサーションの受信先URL)へ送信します。アプリが直接受け取ることはありません。 - 署名検証・ユーザー情報取得・セッション確立
アプリがIdPの公開鍵(X.509証明書)で署名を確かめ、宛先や有効期限も確認したうえでセッションを作ります。 - アプリへアクセス許可(RelayStateへ遷移)
これでログインが完了します。RelayStateに記録した「もともと開きたかったページ」へ遷移します。
② IdP起点(IdP-initiated)
ユーザーが先にOkta側(ダッシュボード)を開き、そこに並んだアプリのアイコンをクリックして始まるパターンです。こちらも図と本文の番号(①〜⑤)は対応しています。
図:IdP起点(IdP-initiated)サインインフロー
- IdPのダッシュボードでアプリをクリック
ユーザーがOktaのダッシュボードで、使いたいアプリのアイコンを選びます。 - SAMLアサーションを即時生成
OktaはAuthnRequest(確認のお願い)を待たずに、その場でアサーションを作ります。 - アサーションをブラウザに返す
Oktaが署名付きのアサーションをブラウザに渡します。 - ACS URLにPOST
ブラウザがアサーションをアプリのACS URLへ送信します。 - 検証・セッション確立 → ランディングページへ
アプリがアサーションを検証してセッションを作り、既定のページ(ランディングページ)を表示します。
OktaはIdPにもSPにもなれる
ここまではOktaを「IdP」として説明しましたが、Oktaは状況に応じてIdPにもSPにもなれます。
- OktaがIdPの場合:OktaがIDを管理し、SPへSSOを提供します。前述のフローで「IdP=Okta」となる形が、これにあたります。
- OktaがSPの場合:会社が既に別のIdPを持つとき、Okta自身が外部IdPの認証を信頼します。外部IdPで認証されたユーザーを、JITプロビジョニング(初回サインイン時にOkta側のユーザーを自動作成する仕組み)でOktaに受け入れます。
→ Oktaドキュメント: SAMLアプリの統合
3. Oktaで設定する際のポイント
まず前提として、Oktaにアプリを連携する経路は大きく2つあります。SalesforceやSlackなど主要SaaSの多くは、OIN(Okta Integration Network)カタログにOktaが検証・公開した統合として登録されており、管理コンソールの「アプリカタログを参照」から追加するだけで、SAML設定の大部分が用意済みです。
図:アプリ統合カタログ
カタログに無いアプリや自社独自アプリの場合は、App Integration Wizard(AIW:アプリ統合ウィザード)で一から作成します(「アプリ統合を作成」→「SAML 2.0」)。
図:アプリ統合を作成
→ Oktaドキュメント: Create an app integration
以下では、AIWで一から設定する場合の項目を整理します。
→ Oktaドキュメント: アプリ統合ウィザードのSAMLフィールドのリファレンス(各設定項目の詳細)
基本設定(必須)
図:SAMLの設定(基本設定)
| 設定項目 | 内容・注意点 |
| シングルサインオン URL(=ACS URL) | Okta がアサーションを POST する送信先。IdP 起点サインインの既定の送信先としても常に使われます。連携先(SP)から取得して正確に入力します。 |
| オーディエンス URI(SP Entity ID) | アサーションの宛先となる SP の識別子。なりすまし防止のため、SP 側の Entity ID と厳密に一致させます。 |
| デフォルトの RelayState | ログイン後に特定ページへ戻したい場合に設定します(ディープリンク対応)。多くは空欄で構いません。 |
| 名前 ID のフォーマット | アサーションで送るユーザー識別子の形式(emailAddress など)。Okta の既定は Unspecified。SP の指定がなければ既定のままで構いません。 |
| アプリケーションのユーザー名 | 各ユーザーのアプリ用ユーザー名として実際に送る値(例:メールアドレス)。編集可能なフィールドを使うと安全性が下がるため避けます。 |
詳細設定
「詳細設定を表示」を開くと、セキュリティに関わる重要な項目が現れます。主なものは次のとおりです。
図:SAMLの設定(詳細設定)
| 設定項目 | 内容・注意点 |
| 応答/アサーション署名 | Okta が返す応答やアサーションに署名するかを指定します。署名は改ざん検知の要なので、原則として有効にします。 |
| 署名アルゴリズム/ダイジェストアルゴリズム | 署名に使うアルゴリズムです。Okta の既定は SHA-256。SP の要件がなければ既定のままで構いません。 |
| アサーション暗号化/暗号化証明書 | アサーションの中身を暗号化するか。機微な属性を含む場合に検討します(任意)。有効化には SP 側の暗号化用証明書が必要です。 |
| 署名証明書/署名付きリクエスト | SP から届く SAML リクエストを、アップロードした署名用証明書で検証する設定です。SP 起点で署名付きリクエストを使う場合に有効にします。 |
| シングルログアウトを有効化/シングルログアウト URL | SLO(後述)を有効にし、サインアウト応答の送信先を指定します。署名証明書のアップロード後に設定できます。 |
| 認証コンテキストクラス | アサーションに載せる「どの方式で認証したか」の要求区分です。SP の指定がある場合に合わせます。 |
| 強制認証に準拠 | SP が ForceAuthn(毎回の再認証要求)を出したとき、それを尊重して再認証を求めるかを設定します。 |
属性ステートメント
SPに渡すユーザー属性・グループ情報は、「属性ステートメント」で定義します。
ただし、属性ステートメントはアプリ統合ウィザード(AIW)の途中では設定できません。 下図のように、アプリ作成後に「サインオン(Sign On)」タブから追加・編集します (値の指定にはOkta Expression Languageを使います)。
→ Oktaドキュメント: アプリ統合にカスタムクレームを構成する
図:属性ステートメント設定
運用前に決めておくこと
- 自社が OIE か Classic Engine かを確認する
Oktaは Identity Engine(OIE)と Classic Engine で管理画面や設定項目が異なります。手順は自社の環境に合うドキュメント(OIE用またはClassic用)を参照してください。 - 緊急時のアクセス手段(バックドア)を確保する
IdPであるOktaに障害が起きると、管理者がアプリに入れなくなるおそれがあります。SAML以外のローカル認証など、緊急時の代替手段を用意しておきます。
4. 発展的なトピックと、さらに深い用語
ここからは、第1章で省いた、より厳密な仕組みと用語やOkta固有の発展機能を扱います。
「SAML Response」と「アサーション」は別物
よく混同されますが、両者は「封筒と中身」の関係です。SPのACS URLが受け取るのは外側のResponseで、その内側からアサーションを取り出して検証します。
図:SAML Responseとアサーションの入れ子構造
〔SAML 2.0は4つの部品でできている〕
SAMLの仕様は、役割の異なる4層からなります。土台のアサーションから、具体的なユースケース(プロファイル)まで積み重なる構造です。
図:SAML 2.0の4層構造
Oktaで設定・確認できるアサーション関連の要素
以下は、OktaのAIWや機能で設定・出力を制御できる項目です(SAML仕様一般の要素は割愛します)。
| 用語 | 概要 |
| サブジェクト/ネーム ID | アサーションが「誰について」を示す部分。<saml:Subject> 内の <saml:NameID> が SP の識別キーになります。Format 属性で種類を指定し、Okta の既定は Unspecified です。 |
| 認証コンテキスト | ユーザーが「どう認証されたか」を示す情報。<AuthnContextClassRef> で表され、SP は MFA の有無などを判断できます。Okta では session.amr 属性(pwd・mfa など)でも伝えられます。 |
| メタデータ/Metadata | SP・IdP の設定情報をまとめた XML 文書。Entity ID や各エンドポイント、署名用の X.509 証明書を含みます。交換すれば信頼設定を自動化でき、Okta はメタデータ URL を提供します。 |
| 署名と暗号化 | 署名(XMLDSig)は真正性・完全性(本物で改ざんなし)を守り、SAML では必須級。暗号化(XML Encryption)は機密性(中身を隠す)を守り、Okta では任意です。 |
Single Logout(SLO):シングルログアウト
ユーザーがSPのログアウトボタンを押すと、OktaのセッションとSPのセッションの両方を一度の操作で終了できる機能です。「アプリからログアウトしたのにOktaは入りっぱなし」という状態を防げます。
〔Oktaでの対応状況・制約〕
OktaのSLOは、最初のトリガーとしてSP起点(SP-initiated)のみをサポートします。SPが署名付きのSLOリクエストをOktaに送ることで、Oktaセッションを終了します。
なお、OIE(Identity Engine)には「Front-channel SLO(Multiple Device SLO)」があり、SP起点のSLO要求を受けたOktaが他の参加アプリへも連鎖的にサインアウト要求を送ります(最初のトリガーはSP起点、Oktaから他アプリへの通知はIdP起点、という二段構造)。
また、SLOに対応するのは一部のアプリのみです。SWAアプリは非対応で、SAMLアプリもSP側が署名付きSLO要求を送れる場合に限られます(対応可否は各アプリのガイドよりご確認ください)。
→ Oktaドキュメント: アプリ統合でシングルログアウトを構成する
→ Oktaドキュメント: Configure Single Logout
IdP起点に非対応のアプリへの対処(Okta独自)
SP起点フローにしか対応しないアプリでも、OktaのBookmark App統合を使えばIdP起点フローを擬似的に再現できます(ダッシュボードにアイコンを表示し、そこから起動します)。
→ Oktaドキュメント: IdP起点フローをBookmarkアプリでシミュレートする
MFAとの組み合わせ
Oktaは、アサーション発行前にMFA(多要素認証)を必須にできます。アサーションには「MFAを経たか」が含まれ、SPはその有無を確認できます。前述のsession.amr属性で認証手段を明示的に渡すことも可能です。
→ Oktaドキュメント: SAMLアプリの統合
SAMLとその他のプロトコルの比較
| プロトコル | 主な用途 | データ形式 | 向いているシナリオ |
| SAML 2.0 | 企業向け SSO | XML | 大企業・既存システムとの連携、高いセキュリティ要件 |
| OIDC | モダンな SSO・ユーザー認証 | JSON / JWT | モバイルアプリ、SPA、API ファースト設計 |
| OAuth 2.0 | API 認可 | JSON / JWT | サードパーティ API へのアクセス権限委譲 |
| SWA(Secure Web Authentication・Okta 独自) | 非対応アプリへの SSO | フォーム POST | SAML・OIDC・WS-Federation のいずれにも対応しないレガシーアプリ |
| WS-Federation | Microsoft 製品向け SSO | XML | SharePoint など旧世代の Microsoft 製品 |
5. SAMLとOIDCの比較・選定ガイド
現代の選択肢として、SAMLと並んでOIDC(OpenID Connect)が広く使われています。OktaはSSOの新規統合にOIDCを推奨しており、どちらを選ぶかは要件によって変わります。
〔OIDCとは〕
OpenID Connect(OIDC)は、OAuth 2.0 を拡張した認証の標準です。OAuth 2.0 がAPIへの認可(アクセス権の委譲)を担うのに対し、OIDCはその上にユーザー認証とSSOを追加します。GoogleやMicrosoftが大規模に採用して普及した、SAMLより後発のモダンなプロトコルです。証明書にあたるものとして、JSON形式の軽量なトークン(IDトークン)を使います。
詳細比較表
SAMLとOIDCは、どちらもID連携を実現しますが、設計思想が根本的に異なります。主な違いを表にまとめます。
| 比較軸 | SAML 2.0 | OIDC |
| データ形式 | XML(署名付き) | JWT(JSON Web Token) |
| 策定年 | 2005年(エンタープライズ向け) | 2014年(モバイル・API向け) |
| ペイロードサイズ | 重い(数KB~) | 軽い(数百バイト~) |
| 通信方式 | ブラウザリダイレクト(POST / Redirect Binding) | リダイレクト+REST API(バックチャネル通信あり) |
| 設定方法 | メタデータ XML を手動交換・静的設定 | Discovery URL で動的自動取得 |
| モバイル対応 | △(ブラウザ依存のため制限あり) | ◎(ネイティブアプリ・SPA にも対応) |
| API 認可 | △(API 保護は不得意) | ◎(アクセストークンで API を直接保護) |
| 実装難易度 | 高(XML 処理・署名検証が複雑) | 低~中(SDK が豊富) |
| エンタープライズ採用実績 | ◎(レガシー・大企業に根強い) | ○(クラウドネイティブ企業では標準) |
| シングルログアウト(SLO) | ◎(成熟した仕様あり) | ○(仕様はあるが実装が進まないベンダーも) |
| Okta 推奨度 | 既存システムとの連携・要件がある場合 | 新規統合では推奨 |
JWTとSAMLアサーションの比較
OIDCのIDトークン(JWT)とSAMLアサーション(XML)は、どちらも「利用者を証明する署名付きトークン」ですが、形式が大きく異なります。主な違いは次のとおりです。
| 観点 | SAML アサーション(XML) | JWT(ID トークン) |
| 形式 | XML のタグ構造 | Base64 のドット区切り文字列 |
| サイズ | 数 KB ~(重い) | 数百バイト ~(軽い) |
| 主な用途 | ブラウザ経由の SSO | モバイル・API・SPA |
JWTはコンパクトなため、モバイルアプリやAPIのAuthorizationヘッダーに直接付与できる点が大きな利点です。
どちらを選ぶべきか:選定フレームワーク
〔Oktaの公式見解〕
Oktaは、新規のSSO統合にはOIDCを推奨しています。OIN(Okta Integration Network)へ新規登録するアプリにもOIDCが推奨されます。SAMLは、既存システムとの連携や特定の要件がある場合に使う選択肢という位置づけです。
→ 出典(Oktaドキュメント): Overview of Single Sign-On in the OIN / Create an app integration
| この状況なら | 推奨プロトコル | 理由 |
| 新規に Web アプリの SSO 統合を構築する | OIDC | 実装が簡単で、SDK も豊富です。Okta が推奨しています。 |
| モバイルアプリ(iOS / Android)で SSO を実装する | OIDC | SAML はブラウザに依存するため、ネイティブアプリには不向きです。 |
| REST API をトークンで保護したい | OIDC + OAuth 2.0 | アクセストークンで API を直接保護できます。SAML では間接的な対応になります。 |
| 既存の SAML 対応エンタープライズアプリと連携する | SAML | 相手のシステムが SAML しか対応していない場合は、SAML の一択になります。 |
| 大企業・官公庁との B2B 連携 | SAML | エンタープライズの IdP では、SAML が標準として根付いていることが多いためです。 |
| 厳密な SLO が必要 | SAML | SAML の SLO 仕様は成熟しており、実装が安定しています。 |
| SPA(React / Vue 等)のフロントエンド SSO | OIDC | Authorization Code + PKCE フローで安全にトークンを取得できます(旧来の Implicit フローは非推奨)。 |
共存という選択肢
SAMLとOIDCは排他的ではありません。実際の大企業では、目的別に使い分けるケースが多く見られます。
- レガシーアプリ → SAML、新規アプリ → OIDC
OktaはIdPとして両方をサポートします。既存のSAML統合を維持しつつ、新規アプリにはOIDCを採用できます。 - Oktaがプロトコルの差異を吸収
Oktaをハブにすれば、アプリ側はOIDCだけでやり取りし、背後でOktaがSAMLの外部IdPと通信する構成も可能です。
〔OIDCはSAMLの「上位互換」ではない〕
OIDCはモダンで扱いやすい一方、SAMLが得意とする領域(エンタープライズのID連携、属性ベースのアクセス制御、成熟したSLO)ではSAMLに分があります。「新しいからOIDCが優れている」ではなく、ユースケースに合わせて選びます。
6. まとめ
SAMLは複雑に見えますが、本質はシンプルです。「信頼できるIdPが本人を保証し、そのアサーションをSPが確かめる」
- SPとIdPは直接通信しない
ブラウザが仲介します。SAMLの安全性は、この設計に支えられています。 - 証明書(アサーション)は署名で守られる
IdPがアサーションにデジタル署名することで、改ざんや偽造を防ぎます。ユーザーの属性(所属グループやロールなど)はアサーションに含まれます。 - フローはSP起点とIdP起点の2種類
大半はSP起点です。IdP起点はCSRFなどのリスクがあるため、実装時は対策が要ります。 - OktaはIdPにもSPにもなれる
既存のID基盤と共存する、柔軟な導入が可能です。 - 新規ならOIDC、エンタープライズ連携ならSAML
「モダンか否か」ではなく、対象のシステム・デバイス・実装力で選びます。両者はOktaを介して共存もできます。
お問い合わせ・資料請求
株式会社マクニカ Okta 担当
- TEL:045-476-2010
- E-mail:okta@macnica.co.jp
平日 9:00~17:00