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 setting」をクリックします。 ステップ4: 「Endpoints」フィールドで、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」値を取得します。(この表の下のNOTEを参照してください。) |
発行者 | 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: Realmを選択します。 ステップ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を開き、Realmを選択します。 ステップ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に設定されている場合のみ必要です。