SAML
企業の ID プロバイダーとサービスプロバイダー間でシングルサインオンを実現する XML ベースの認証プロトコル
認証
SAML とは
SAML (Security Assertion Markup Language) は、ID プロバイダー (IdP) とサービスプロバイダー (SP) の間で認証・認可情報を XML 形式で交換するプロトコルである。2005 年に OASIS が SAML 2.0 を標準化し、エンタープライズ SSO の事実上の標準になっている。
認証フロー (SP-Initiated)
1. ユーザーが SP (例: Slack) にアクセス
2. SP が SAML AuthnRequest を生成し、IdP にリダイレクト
3. ユーザーが IdP (例: Okta) でログイン
4. IdP が SAML Response (Assertion) を生成
5. ブラウザが SAML Response を SP に POST
6. SP が Assertion を検証し、ログイン完了
[ユーザー] → [SP: Slack] → リダイレクト → [IdP: Okta]
↓ ログイン
[ユーザー] ← [SP: Slack] ← POST Assertion ← [IdP: Okta]
SAML Assertion の構造
<saml:Assertion>
<saml:Issuer>https://idp.example.com</saml:Issuer>
<saml:Subject>
<saml:NameID>user@example.com</saml:NameID>
</saml:Subject>
<saml:Conditions NotBefore="..." NotOnOrAfter="...">
<saml:AudienceRestriction>
<saml:Audience>https://sp.example.com</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AttributeStatement>
<saml:Attribute Name="role">
<saml:AttributeValue>admin</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
Assertion は XML 署名で改ざんを防止する。SP は IdP の公開鍵で署名を検証する。
OIDC との比較
| 観点 | SAML 2.0 | OpenID Connect |
|---|---|---|
| データ形式 | XML | JSON / JWT |
| 用途 | エンタープライズ SSO | Web / モバイルアプリ |
| 実装の複雑さ | 高い (XML 署名、パース) | 低い (JSON、JWT) |
| モバイル対応 | 不向き | 適している |
| 普及度 | エンタープライズで標準 | コンシューマー向けで標準 |
新規プロジェクトでは OIDC が推奨される。SAML は既存のエンタープライズ IdP (Active Directory、Okta) との連携で使われる。
AWS での SAML 連携
- IAM Identity Center: SAML IdP と連携し、AWS アカウントへの SSO を提供
- Cognito User Pool: SAML IdP をフェデレーション ID プロバイダーとして設定し、アプリケーションの SSO を実現
- IAM SAML プロバイダー: SAML Assertion で一時的な AWS 認証情報を取得
理論と実装の両面から学ぶなら関連書籍が参考になる。