13 ポイント 投稿者 xguru 2024-07-29 | まだコメントはありません。 | WhatsAppで共有
  • SAML(Single Assertion Markup Language) は、XML形式のセキュリティ関連メッセージを交換するためのルールを定義する標準
  • 主に3つ以上の独立したエンティティ間でのメッセージ交換に使われる
    • 一般的なシナリオは、異なる会社が作った2つのソフトウェアシステムとユーザーが関わるケース
    • 2つのシステムはユーザーに関する情報を交換する必要がある
    • カスタム統合を行うこともできるが、保守が難しい
  • SAMLはシステム間で同じルールに従わせることで、複雑な統合作業を単純化する

SAMLメッセージ形式

  • SAMLメッセージはXML形式で構成される
  • メッセージの構文を定義し、メッセージ内容を安全に処理する方法を示す
  • <Response> タグを受け取ったら <Assertion> タグを探すべきであること、などが分かる
  • デジタル署名がどのようなものか、またセキュリティ問題を避けるためにメッセージをどう処理すべきかについての指針を提供する

SAMLの柔軟性

  • SAMLは柔軟性を重視して設計されている。原則としてSAMLで多くのことができるが、その柔軟性が複雑さにつながる
  • SAML仕様には数多くの例外事項があり、多くの if や例示が含まれていて、エッジケースを増やしている
  • SAMLは古いため、一部の人々はその柔軟性を活用する
  • 実運用環境、特にレガシーシステムでは、SAMLが通常とは異なる動作をすることがある
  • ほとんどの場合、SAMLの小さなサブセットだけに集中したほうが楽になる

SAMLの実際の用途

  • SAMLは主に Single Sign-On(SSO) に使われる
  • SAMLはいくつか変わったタイプのSSOを定義しているが、一般的には Web Browser SSO Profile を使う
  • エンドユーザーはまず集中管理されたシステムで認証し、その後、使いたいソフトウェアアプリケーションにアクセスする
  • ユーザーはアプリケーションに直接認証するわけではない
  • たとえば Okta を使ってメールにアクセスしたことがあるなら、Web Browser SSO Profile を使っていたということ

SSOに関係するエンティティ

  • SSOには3つの主体が関わる:
    1. ユーザー: アプリケーションを使いたい人
    2. サービスプロバイダー(SP): アプリケーションそのもの
    3. IDプロバイダー(IDP): ユーザーが認証に使う中央サービス
  • 各顧客のIDPはデータベースとみなせる。人に関するデータを追跡している
    • 企業はしばしばIDプロバイダーを使って従業員を部署に割り当て、さまざまな権限を付与する
  • SAMLでユーザーをログインさせるたびに、IDPから情報を取得する必要がある。SSOでは主にIDPにユーザーIDの確認を求める
  • IDPとの事前設定された信頼関係が必要
    • SAML SSOを使うすべての顧客は、アプリケーション内で独自の設定が必要
    • ただし、IDPと直接メッセージをやり取りするわけではない。SAML SSOでは、サービスプロバイダーとIDプロバイダーはユーザーのブラウザーを介して通信する

SAMLエンティティ間の相互作用の仕組み

  • 一般的なSAML SSOプロセス:
    1. ユーザーがWebブラウザーでアプリケーションの一部にアクセスしようとする
    2. ユーザーに有効なセキュリティコンテキストがあるか確認する
    3. ユーザーに有効なセキュリティコンテキストがないため、ログインページを表示する
    4. ユーザーが何らかの情報(例: メールアドレス)を入力すると、それを適切なログイン方法を決めるために使う
    5. ユーザーをIDPのWebアドレスへリダイレクトし、ユーザーのブラウザーを通じてSAMLメッセージをIDPに渡す
    6. IDPはユーザーに資格情報を求めるメッセージを表示する。ユーザーは正常に認証される
    7. IDPは、ユーザーの認証に関する情報を伝えるSAMLメッセージとともに、ユーザーを再びアプリケーションへリダイレクトする
    8. SAMLメッセージを処理し、ユーザーに対するセキュリティコンテキストを設定すべきだと判断する
    9. ユーザーにアプリケーションの目的の部分へのアクセス権を与える
  • IDプロバイダー側からSAML SSOプロセスを開始することもできる
  • この場合、認証リクエストを送らずに認証レスポンスを受け取ることになる
  • SAML SSOサポートを実装する際は、IDP開始のSSOに備える必要がある

SAMLで交換されるメッセージ

  • SAML SSOでは主に2種類のメッセージが重要になる
    • サービスプロバイダーからIDPへ行くメッセージを SAML リクエスト(request) と呼ぶ
    • IDPからサービスプロバイダーへ戻るメッセージを SAML レスポンス(response) と呼ぶ
  • SAMLリクエスト自体はそれほど複雑ではない。XMLをHTTPリダイレクトで送れば十分
  • <AuthnRequest> タグにIDを含めることで、IDPが元のリクエストに対応する <Response> を返せるようにする
  • <Issuer> タグで包んだデータもIDPに送り、自分が誰なのかを伝える
  • SAMLレスポンスはより厄介。通常はPOSTで送信される
  • <Response> は概念的にはいくつかの <Assertion> タグを包む
  • <Assertion> は、ユーザーに関するクレーム(誰なのか、IDPでどのように認証したか、など)を包む
  • Assertion を処理して、ユーザーをログインさせるかどうかを判断する

注意事項

  • ここでは多くの詳細、とくにセキュリティ上重要な内容を省略している
  • SAMLに個人的な関心があったり、仕事上深く調べる理由があったりしない限り、SAMLベースのログインを自分で実装することは勧めない。時間の無駄
  • SAMLをできるだけ早く設定したいなら、私たちはSAMLを抽象化したオープンソースの SSOReady を提供している。多くの時間と苦労を節約できるはず

まだコメントはありません。

まだコメントはありません。