SAML
概要
SAML (Security Assertion Markup Language) は、異なる当事者間の認証と認可を促進するオープンスタンダードです。これは、Single Sign-On (SSO) システムで一般的に使用されており、ユーザーは一度ログインすることで、再度資格情報を入力することなく複数のサービスにアクセスできます。
Kong API Gateway における SAML プラグイン
SAML 仕様は、3 つの主要な役割を定義しています。
- Principal – ログインするユーザー。
- Identity Provider (IdP) – ユーザーを認証し、アイデンティティアサーションを発行するエンティティ。
- Service Provider (SP) – 認証アサーションを受け取るアプリケーションまたはシステム。
Kong API Gateway では、SAML plugin が Service Provider (SP) として機能し、IdP へのログインを開始する責任があります(SP 主導のログイン)。
SAML プラグインの主な機能
- SSO Implementation: 認証されていないユーザーを IdP のログインページにリダイレクトし、認証後に保護されたサービスへのアクセスを許可します。
- Session Management: セッション状態を追跡するためにクッキーを使用してユーザーセッションを維持します。
- Form Handling: IdP authentication flow を POST requests 経由でサポートし、認証パラメータのセキュリティを確保します。
設定の詳細
Field name | Description | Data input |
---|---|---|
ログインコールバック URL | Login Callback URL は、ユーザーが正常にログインした後、認証サーバーからの応答を処理するために使用される URL です。システムは、この URL でアプリケーションに戻すことでプロセスを続行します。 | ユーザー定義 |
ログアウト URL | ユーザーがログアウトリクエストを行うと、システムはこの URL にリダイレクトします: - ユーザーセッションを終了します。 - 認証セッショントークンまたは関連するセッションデータを削除します。 - ユーザーがログインしていたすべてのサービスからログアウトされることを確認します。 | ユーザー定義 |
IDP URL | IDP URL (アイデンティティプロバイダー URL) は、認証システムにおけるアイデンティティプロバイダーの URL です。 IDP URL は通常、次のように構成されます: - ユーザーがログインするために使用する認証サーバーのアドレスを特定します。 - 認証リクエストを処理し、ユーザーを正しいログインページにリダイレクトします。 | ステップ 1: keycloak を開きます。 ステップ 2: レルムを選択します。 ステップ 3: 左メニューの「Realm 設定」をクリックします。 ステップ 4: 「エンドポイント」フィールドで、リンク https://keycloak-saml.apimags.skcloud.io/realms/saml-test/protocol/saml/descriptor をクリックして、ドキュメントツリーにリダイレクトされます。 ステップ 5: md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect の「Location」値を取得します。 (この表の下の注意を参照してください。) |
発行者 | Isser は: - アイデンティティプロバイダーの一意の識別子です。 - ユーザーのアイデンティティを検証する権限を指定するために、認証トークンまたはアサーションに含まれます。 | レルムのクライアント ID。 |
クライアント署名 | Client Signature は、クライアント(顧客またはアプリケーション)によって作成されたデジタル署名です。クライアント署名は、次の目的でよく使用されます: - リクエストが有効で信頼できるソースから来ていることを確認します。 - データが送信中に変更または改ざんされないように保護します。 - アイデンティティプロバイダー(IdP)または他のサーバーと対話する際のクライアントの真正性を確保します。 この署名は通常、クライアントの秘密鍵を使用して作成され、その後、対応する公開鍵でサーバーによって検証されて有効性が確認されます。 | ステップ 1: このリンクからクライアント署名を取得します: https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4 ステップ 2: コンソールから証明書をエクスポートします。 ステップ 3: keycloak を開き、レルムを選択します。 ステップ 4: 左メニューの「クライアント」をクリックします。 ステップ 5: 「キー」タブを選択します。 ステップ 6: 「クライアント署名が必要」= ON に切り替えて、「クライアント署名が必要ですか?」ポップアップを開きます。 ステップ 7: ステップ 2 でエクスポートしたファイルをインポートします。 |
IDP 証明書 | IDP Certificate (アイデンティティプロバイダー証明書) は、アイデンティティプロバイダー(IdP)によって発行されたデジタル証明書で、IdP とアプリケーションまたはサービス間の認証プロセス中にセキュリティと認証を確保するために使用されます。 The IDP Certificate には、IdP からのメッセージの真正性を受信者が確認できるようにする公開鍵が含まれています。 | ステップ 1: keycloak を開きます。 ステップ 2: レルムを選択します。 ステップ 3: 左メニューの「Realm 設定」をクリックします。 ステップ 4: 「エンドポイント」フィールドで、リンク https://keycloak-saml.apimags.skcloud.io/realms/saml-test/protocol/saml/descriptor をクリックして、ドキュメントツリーにリダイレクトされます。 ステップ 5: ds:X509Certificate タグ内のデータをコピーします。 ステップ 6: ステップ 5 で取得したデータを IDP 証明書フィールドに貼り付けます。 |
暗号化証明書 ID | IdP は、SP にメッセージを送信する際に正しい暗号化証明書を特定するために暗号化証明書 ID を使用し、送信中の機密情報のセキュリティを確保します。 | ステップ 1: このリンクからクライアント署名を取得します: https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4 ステップ 2: コンソールから証明書をエクスポートします。 ステップ 3: keycloak を開き、レルムを選択します。 ステップ 4: 左メニューの「クライアント」をクリックします。 ステップ 5: 「キー」タブを選択します。 ステップ 6: 「アサーションを暗号化」= ON に切り替えて、「クライアント署名が必要ですか?」ポップアップを開きます。 ステップ 7: ステップ 2 でエクスポートしたファイルをインポートします。 |
Redis ホスト | Redis Host は、アプリケーションがキャッシュからデータを保存および取得するために接続する必要がある Redis サーバーのアドレスです。 | ユーザー定義 |
Redis ポート | Redis ポートは、Redis サーバーがクライアントからの接続をリッスンして受信するために使用するネットワークポートです。 | ユーザー定義 |
フロントエンド URL | これは、ユーザーがブラウザでアプリケーションを開くために使用するアドレスです。 | ユーザー定義 |
許可されたヘッダー | Allow Headers は、サーバーがそのサーバーにリクエストを送信する際にブラウザが使用することを許可する HTTP ヘッダーです。 | ユーザー定義 |
実行パス | 認証が適用されるためには、URL にこのパスが含まれている必要があります。 | ユーザー定義 |
注意:
- テキストボックスは、Client Signature が ON に設定されている場合のみ必要です。
- Encryption cert id テキストボックスは、Encrypt assertions が ON に設定されている場合のみ必要です。