[V9.0.2 2017 年 5 月]

REST API での HTTP 基本認証の使用

REST API のユーザーは、HTTP ヘッダー内にユーザー ID とパスワードを指定することによって認証できます。 [V9.0.5 2018 年 3 月]POST、PATCH、DELETE などの HTTP メソッドでこの認証方式を使用するには、 ibm-mq-rest-csrf-token HTTP ヘッダーと、ユーザー ID およびパスワードも指定する必要があります。

始める前に

  • REST APIの使用を許可されるようにユーザー、グループ、および役割を構成します。 詳しくは、 ユーザーと役割の構成を参照してください。
  • HTTP 基本認証を有効にしておきます。 mqwebuser.xml ファイルに次の XML が存在し、コメント化されていないことを確認してください。 この XML は <featureManager> タグ内になければなりません。
    <feature>basicAuthenticationMQ-1.0</feature>
    mqwebuser.xml ファイルを編集するには、 特権ユーザー でなければなりません。
  • REST 要求を送信するときは、セキュア接続を使用していることを確認してください。 ユーザー名とパスワードの組み合わせはエンコードされますが、暗号化されないため、 REST APIで HTTP 基本認証を使用する場合は、セキュア接続 (HTTPS) を使用する必要があります。
  • login リソースに対する HTTP GET メソッドを使用することにより、現行ユーザーの資格情報を照会できます。このメソッドを使用する際、その要求を認証するための基本認証情報を指定する必要があります。 この要求は、認証方式、ユーザー名、およびユーザーに割り当てられている役割に関する情報を返します。 詳しくは、 GET /loginを参照してください。

手順

  1. ユーザー名とパスワードをコロンで連結します。
    例えば、ユーザー名が admin でパスワードが admin の場合は、次のストリングになります。
    admin:admin
  2. ユーザー名とパスワードのこのストリングを base64 エンコードでエンコードします。
  3. このエンコードされたユーザー名とパスワードを HTTP Authorization: Basic ヘッダーに含めます。
    例えば、ユーザー名 admin とパスワード admin がエンコードされた場合、次のヘッダーが作成されます。
    Authorization: Basic YWRtaW46YWRtaW4=
  4. [V9.0.5 2018 年 3 月] HTTP POST、PATCH、または DELETE メソッドを使用する場合は、追加の認証と、ユーザー名およびパスワードを指定する必要があります。
    この追加認証は、ibm-mq-rest-csrf-token HTTP ヘッダーで指定します。 このヘッダーに必要な内容は、 IBM MQのバージョンによって異なります。
    IBM MQ 9.0.4 以前の場合、ヘッダーの値は CSRF トークン Cookie から取得されます。 その Cookie を取得するには、以下の手順を実行する必要があります。
    1. login REST API リソースに対する HTTP GET 要求を実行依頼して、CSRF トークン Cookie を生成します。 この要求を認証するために、この手順で概説されているユーザー名とパスワードの基本認証を使用してください。
    2. 要求によって返される CSRF トークン Cookie の内容 csrfTokenを、ヘッダー値として追加の HTTP ヘッダーに入れます。 ヘッダーの名前は ibm-mq-rest-csrf-tokenでなければなりません。

      csrfToken Cookie の内容によって、要求の認証に使用される資格情報を、その資格情報の所有者が使用していることが確認されます。 つまり、トークンはクロスサイト・リクエスト・フォージェリー攻撃を防ぐために使用されます。

      この Cookie の内容は変更可能なので、キャッシュされたバージョンの Cookie の内容を使用することはできません。 要求ごとに Cookie の最新の値を使用する必要があります。

    IBM MQ 9.0.5以降、 ibm-mq-rest-csrf-token HTTP ヘッダーが要求内に存在する必要があります。その値は、ブランクを含む任意の値にすることができます。
  5. 適切なヘッダーを使用して REST 要求を IBM MQ に送信します。

以下の例は、 Windows システム上で、基本認証を使用して、キュー・マネージャー QM1上に新しいキュー Q1を作成する方法を示しています。 この例では cURL を使用しています。
  • [V9.0.5 2018 年 3 月] IBM MQ 9.0.5以降では、単一の HTTP 要求のみを発行する必要があります。 キュー・リソースを指定して HTTP POST メソッドを実行し、基本認証で認証を行い、任意の値を指定した ibm-mq-rest-csrf-token HTTP ヘッダーを組み込みます。 どんな値でも使用できます。ブランクでも構いません。値は mqweb サーバーによって検査されません。
    
    curl -k https://localhost:9443/ibmmq/rest/v1/admin/qmgr/QM1/queue -X POST
    -u mqadmin:mqadmin
    -H "ibm-mq-rest-csrf-token: value"
    -H "Content-Type: application/json" --data "{\"name\":\"Q1\"}"
  • IBM MQ 9.0.4 以前の場合、以下の 2 つの HTTP 要求が必要です。
    1. 最初の要求で CSRF トークン Cookie を生成します。
      login リソースに対する HTTP GET メソッドを使用し、基本認証を使用して認証します。 返された CSRF トークンは cookiejar.txt ファイル内に保管されます。 -u フラグはユーザー名とパスワードを指定するためのフラグです。 -c フラグはトークンを保管するファイルの場所を指定するためのフラグです。
      curl -k https://localhost:9443/ibmmq/rest/v1/login -u admin:admin -c c:\cookiejar.txt
    2. 2 番目の要求でキューを作成します。

      キュー・リソースに対する HTTP POST メソッドを使用します。基本認証を使用して認証し、CSRF トークンの内容をヘッダーに組み込みます。

      IBM MQ 9.0.3 またはその前 :
      curl -k https://localhost:9443/ibmmq/rest/v1/qmgr/QM1/queue -X POST -u admin:admin 
      -H "ibm-mq-rest-csrf-token: 83F1817976A6E6F1E980F9F09D7E8A161DC9D9867A634497CE03667B2AF5532B5
      E6F9314E40B4FB31E00A2885E07150C0FD06FFB07B46FD4A5D2DA4C239C2D82C3C87588C8850B975892E1AF96034F
      05F41699A7A1D36DEC048CE18F49A195BB762020D420EB628568D30120F12538B53D3F91939EF8851863EC7B87B6E
      B0F95B57B6AB68B61D4324FAA3DFDE05AC956556736F8A9CA5BAF89BC2174B0EF5CE04E65646626F788F1CE2284EF
      1562868C5A800B8BF4BFB8FB6C3FCD194EA6EB2FF43A3CFB57CCF9F5EF76F0E724FAB645B8E14CD3D9484BF799B3B
      090CCD67B6CE8C8DAB552018A538903B0CD0B9FD747F2F4C18A80A65A2C3AE2A0D631B298AF" 
      -H "Content-Type: application/json" --data "{\"name\":\"Q1\"}"