SAML認証API

SAML Response メッセージを Elasticsearch に送信して処理します。

このAPIは、Kibana以外のカスタムWebアプリケーションでの使用を目的としています。Kibanaを使用している場合は、Elastic StackでのSAMLシングルサインオンの設定を参照してください。

リクエスト

POST /_security/saml/authenticate

説明

送信されるSAMLメッセージは次のいずれかです:

  • 以前にSAML認証準備APIを使用して作成されたSAML認証リクエストへの応答。
  • IdP主導のシングルサインオン(SSO)フローの場合の未請求のSAMLメッセージ。

いずれの場合も、SAMLメッセージは<Response>のルート要素を持つbase64エンコードされたXMLドキュメントである必要があります。

成功した検証の後、ElasticsearchはElasticsearch内部アクセストークンとリフレッシュトークンで応答し、これらはその後の認証に使用できます。このAPIエンドポイントは、IdPでの成功した認証を示すSAML応答をElasticsearchのアクセストークンとリフレッシュトークンに交換します。これらはElasticsearchに対する認証に使用できます。

Elasticsearchは、SAML APIを介して必要なすべてのSAML関連機能を公開しています。これらのAPIは、KibanaがSAMLベースの認証を提供するために内部で使用されますが、他のカスタムWebアプリケーションや他のクライアントでも使用できます。SAML認証準備APISAML無効化APISAMLログアウトAPI、およびSAML完全ログアウトAPIも参照してください。

リクエストボディ

  • content
  • (必須、文字列) ユーザーのブラウザによって送信されたSAML応答、通常はBase64エンコードされたXMLドキュメントです。
  • ids
  • (必須、配列) APIの呼び出し元が現在のユーザーに対して持っているすべての有効なSAMLリクエストIDを含むJSON配列。
  • realm
  • (オプション、文字列) SAML応答を認証する必要があるレルムの名前。多くのSAMLレルムが定義されている場合に便利です。

レスポンスボディ

  • access_token
  • (文字列) Elasticsearchによって生成されたアクセストークン。
  • username
  • (文字列) 認証されたユーザーの名前。
  • expires_in
  • (整数) トークンの有効期限までの残り時間(秒)。
  • refresh_token
  • (文字列) Elasticsearchによって生成されたリフレッシュトークン。
  • realm
  • (文字列) ユーザーが認証されたレルムの名前。

以下の例は、SAML IdPでの成功した認証を示すSAML応答をElasticsearchのアクセストークンとリフレッシュトークンに交換し、その後のリクエストで使用する方法を示しています:

Python

  1. resp = client.security.saml_authenticate(
  2. content="PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
  3. ids=[
  4. "4fee3b046395c4e751011e97f8900b5273d56685"
  5. ],
  6. )
  7. print(resp)

Js

  1. const response = await client.security.samlAuthenticate({
  2. content:
  3. "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
  4. ids: ["4fee3b046395c4e751011e97f8900b5273d56685"],
  5. });
  6. console.log(response);

コンソール

  1. POST /_security/saml/authenticate
  2. {
  3. "content" : "PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMD.....",
  4. "ids" : ["4fee3b046395c4e751011e97f8900b5273d56685"]
  5. }

APIは次のようなレスポンスを返します:

Js

  1. {
  2. "access_token" : "46ToAxZVaXVVZTVKOVF5YU04ZFJVUDVSZlV3",
  3. "username" : "Bearer",
  4. "expires_in" : 1200,
  5. "refresh_token": "mJdXLtmvTUSpoLwMvdBt_w",
  6. "realm": "saml1"
  7. }