Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

シングルサインオンが有効な場合は API を使用( PingFederate )

共同作成者

ある場合 "シングルサインオン( SSO )の設定と有効化" また、 SSO プロバイダとして PingFederate を使用するには、グリッド管理 API またはテナント管理 API で有効な認証トークンを取得するための一連の API 要求を問題 で処理する必要があります。

シングルサインオンが有効な場合は、 API にサインインします

これらの手順は、 SSO アイデンティティプロバイダとして PingFederate を使用している場合に適用されます

作業を開始する前に
  • StorageGRID ユーザグループに属するフェデレーテッドユーザの SSO ユーザ名とパスワードが必要です。

  • テナント管理 API にアクセスする場合は、テナントアカウント ID を確認しておきます。

このタスクについて

認証トークンを取得するには、次のいずれかの例を使用します。

  • storagegrid-ssoauth.py Pythonスクリプト。StorageGRID インストールファイルのディレクトリにあります (./rpms Red Hat Enterprise LinuxまたはCentOSの場合: ./debs UbuntuまたはDebianの場合は、および ./vsphere VMwareの場合)をクリックします。

  • cURL 要求のワークフローの例。

    cURL ワークフローは、実行に時間がかかりすぎるとタイムアウトする場合があります。次のエラーが表示される場合があります。 A valid SubjectConfirmation was not found on this Response

    メモ cURL ワークフローの例では、パスワードが他のユーザに表示されないように保護されていません。

    URLエンコード問題 を使用している場合は、次のエラーが表示されることがあります。 Unsupported SAML version

手順
  1. 認証トークンを取得するには、次のいずれかの方法を選択します。

    • を使用します storagegrid-ssoauth.py Pythonスクリプト。手順 2 に進みます。

    • curl 要求を使用します。手順 3 に進みます。

  2. を使用する場合は、を参照してください storagegrid-ssoauth.py スクリプトを使用して、Pythonインタープリタにスクリプトを渡し、スクリプトを実行します。

    プロンプトが表示されたら、次の引数の値を入力します。

    • SSO 方式。「 PingFederate 」( PingFederate 、 PingFederate など)の任意のバリエーションを入力できます。

    • SSO ユーザ名

    • StorageGRID がインストールされているドメイン。このフィールドは PingFederate には使用されません。空白のままにするか、任意の値を入力できます。

    • StorageGRID のアドレス

    • テナント管理 API にアクセスする場合は、テナントアカウント ID 。

      Ping フェデレーション用の SSO 認証スクリプト

    StorageGRID 認証トークンが出力に表示されます。SSO を使用していない場合の API の使用方法と同様に、トークンを他の要求に使用できるようになりました。

  3. cURL 要求を使用する場合は、次の手順 を使用します。

    1. サインインに必要な変数を宣言します。

      export SAMLUSER='my-sso-username'
      export SAMLPASSWORD='my-password'
      export TENANTACCOUNTID='12345'
      export STORAGEGRID_ADDRESS='storagegrid.example.com'
      メモ グリッド管理APIにアクセスするには、として0を使用します TENANTACCOUNTID
    2. 署名付き認証URLを受信するには、へのPOST要求を問題 に送信します `/api/v3/authorize-saml`をクリックし、応答からJSONエンコードを削除します。

      次の例は、 TENANTACCOUNTID の署名済み認証 URL を取得するための POST 要求です。結果は python-m json ツールに渡され、 JSON エンコードが削除されます。

      curl -X POST "https://$STORAGEGRID_ADDRESS/api/v3/authorize-saml" \
        -H "accept: application/json" -H  "Content-Type: application/json" \
        --data "{\"accountId\": \"$TENANTACCOUNTID\"}" | python -m json.tool

      この例の応答には、 URL エンコードされた署名済み URL が含まれていますが、 JSON エンコードされたレイヤは含まれていません。

      {
          "apiVersion": "3.0",
          "data": "https://my-pf-baseurl/idp/SSO.saml2?...",
          "responseTime": "2018-11-06T16:30:23.355Z",
          "status": "success"
      }
    3. を保存します SAMLRequest 後続のコマンドで使用する応答から。

      export SAMLREQUEST="https://my-pf-baseurl/idp/SSO.saml2?..."
    4. 応答とクッキーをエクスポートし、応答をエコーします。

      RESPONSE=$(curl -c - "$SAMLREQUEST")
      echo "$RESPONSE" | grep 'input type="hidden" name="pf.adapterId" id="pf.adapterId"'
    5. 'pf.adapterID' 値をエクスポートし、応答をエコーします。

      export ADAPTER='myAdapter'
      echo "$RESPONSE" | grep 'base'
    6. 「 href 」値をエクスポートし(末尾のスラッシュ / を削除)、応答をエコーします。

      export BASEURL='https://my-pf-baseurl'
      echo "$RESPONSE" | grep 'form method="POST"'
    7. 「 action 」の値をエクスポートします。

      export SSOPING='/idp/.../resumeSAML20/idp/SSO.ping'
    8. クレデンシャルとともに Cookie を送信する:

      curl -b <(echo "$RESPONSE") -X POST "$BASEURL$SSOPING" \
      --data "pf.username=$SAMLUSER&pf.pass=$SAMLPASSWORD&pf.ok=clicked&pf.cancel=&pf.adapterId=$ADAPTER" --include
    9. を保存します SAMLResponse 非表示フィールドから:

      export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4='
    10. を使用して保存します `SAMLResponse`をクリックして、StorageGRID を作成します/api/saml-response StorageGRID 認証トークンの生成要求

      の場合 `RelayState`をクリックします。グリッド管理APIにサインインする場合は、テナントアカウントIDを使用します。

      curl -X POST "https://$STORAGEGRID_ADDRESS:443/api/saml-response" \
        -H "accept: application/json" \
        --data-urlencode "SAMLResponse=$SAMLResponse" \
        --data-urlencode "RelayState=$TENANTACCOUNTID" \
        | python -m json.tool

      応答には認証トークンが含まれています。

    {
        "apiVersion": "3.0",
        "data": "56eb07bf-21f6-40b7-af0b-5c6cacfb25e7",
        "responseTime": "2018-11-07T21:32:53.486Z",
        "status": "success"
    }
    1. 認証トークンを応答にという名前で保存します MYTOKEN

      export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"

      これで、を使用できます MYTOKEN その他の要求の場合は、SSOを使用していない場合のAPIの使用方法と同様です。

シングルサインオンが有効な場合は、 API からサインアウトします

シングルサインオン( SSO )が有効になっている場合は、グリッド管理 API またはテナント管理 API からサインアウトするための一連の API 要求を問題 で処理する必要があります。これらの手順は、 SSO アイデンティティプロバイダとして PingFederate を使用している場合に適用されます

このタスクについて

必要に応じて、組織のシングルログアウトページからログアウトすることで、StorageGRID APIからサインアウトできます。または、 StorageGRID からシングルログアウト( SLO )を実行することもできます。この場合、有効な StorageGRID ベアラトークンが必要です。

手順
  1. 署名されたログアウト要求を生成するには、合格します cookie "sso=true" SLO APIで次の処理を実行します。

    curl -k -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \
    -H "accept: application/json" \
    -H "Authorization: Bearer $MYTOKEN" \
    --cookie "sso=true" \
    | python -m json.tool

    ログアウト URL が返されます。

    {
        "apiVersion": "3.0",
        "data": "https://my-ping-url/idp/SLO.saml2?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D",
        "responseTime": "2021-10-12T22:20:30.839Z",
        "status": "success"
    }
  2. ログアウト URL を保存します。

    export LOGOUT_REQUEST='https://my-ping-url/idp/SLO.saml2?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D'
  3. 要求をログアウト URL に送信し、 SLO を実行して StorageGRID にリダイレクトします。

    curl --include "$LOGOUT_REQUEST"

    302 応答が返されます。リダイレクト先は API のみのログアウトには適用されません。

    HTTP/1.1 302 Found
    Location: https://$STORAGEGRID_ADDRESS:443/api/saml-logout?SAMLResponse=fVLLasMwEPwVo7ss%...%23rsa-sha256
    Set-Cookie: PF=QoKs...SgCC; Path=/; Secure; HttpOnly; SameSite=None
  4. StorageGRID Bearer トークンを削除します。

    StorageGRID Bearer トークンを削除すると、 SSO を使用しない場合と同じように動作します。状況 cookie "sso=true" を指定しないと、SSOの状態に影響を及ぼすことなくユーザがStorageGRID からログアウトされます。

    curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \
    -H "accept: application/json" \
    -H "Authorization: Bearer $MYTOKEN" \
    --include

    A 204 No Content 応答として、ユーザがサインアウトしたことが示されます。

    HTTP/1.1 204 No Content