SSOとSAML
🔥 Vibe プロンプト
「SaaSアプリ用のSAML SSOを設定。Google WorkspaceまたはAzure ADに接続。」
SAMLフロー
ユーザー → SP (アプリ) → IdP (認証プロバイダー) → ログイン → SAML応答 → SP → アクセス許可
例: app.myapp.comにアクセス→Google Workspaceにリダイレクト→認証→戻る
SAML vs OIDC
| 項目 | SAML | OIDC | |------|------|------| | 形式 | XML | JSON | | トランスポート | HTTP redirect (POST) | HTTP (GET/POST) | | ユースケース | エンタープライズSSO | Web/モバイルアプリ | | 複雑さ | 高 | 低 | | 最適 | AD連携の大規模組織 | モダンアプリ、API |
Python実装
from onelogin.saml2.auth import OneLogin_Saml2_Auth
def saml_login(request):
auth = OneLogin_Saml2_Auth(request, settings)
return auth.login()
def saml_acs(request):
auth = OneLogin_Saml2_Auth(request, settings)
auth.process_response()
if auth.is_authenticated():
attributes = auth.get_attributes()
return f"ようこそ {attributes['email'][0]}!"
return "認証失敗", 401
主要用語
| 用語 | 意味 | |------|------| | SP | あなたのアプリ | | IdP | Google、Azure AD、Okta | | ACS URL | IdPがSAML応答を送信するURL | | Metadata XML | SPとIdP間の設定交換 | | NameID | ユーザー識別子(メール) |
ベストプラクティス
- SAMLリクエストと応答に署名
- 短いアサーション有効期限(5分)
- IssuerとAudienceを検証
- 機密データはアサーションを暗号化
重要なポイント
- コアコンセプトをしっかり理解する
- ハンズオンコード例で実践する
- 実世界の問題に応用する
- 演習で知識を強化する
さらに学ぶ
- 公式ドキュメント
- GitHubのオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル