REST API で秘密鍵認証を使用する方法

CA Service Desk Manager の REST API は、秘密鍵認証をサポートします。 詳細については、「REST HTTP メソッド - REST 秘密鍵認証」を参照してください。 この記事では、CA SDM REST API で秘密鍵認証を実装する際の概要およびその他の考慮事項を提供します。
casm173
CA Service Desk Manager の REST API は、秘密鍵認証をサポートします。 詳細については、「REST HTTP メソッド - REST 秘密鍵認証」を参照してください。 この記事では、CA SDM REST API で秘密鍵認証を実装する際の概要およびその他の考慮事項を提供します。
前提条件および考慮事項
CA SDM REST API で秘密鍵認証を実装する前に、以下の点を考慮します。
  1. クライアント(任意のサードパーティのプログラム)と SDM REST サーバ間の通信があることを確認します。 まず、これら 2 つのコンポーネント間の HTTPS の実装を検討する必要があります。 SSL 証明書を使用して CA SDM REST Tomcat をセキュリティ保護し、クライアントから接続するときにその証明書および HTTPS の URL を使用できます。
  2. CA SDM は
    HMAC_ALGORITHM
    をサポートするように設定する必要があります。 CA SDM にログインし、[
    管理
    ]-
    [オプション マネージャ]-[Web サービス]-[hmac_algorithm]
    を選択します。
    このオプションは、優先値に設定できます。 オプションをインストールします(この場合、
    hmacSHA1
    に設定されています)。 CA SDM のオプションをインストールする際にいつも行う、必要な手順に従います。
  3. CA SDM
    secret_key
    は、REST アクセス キーの作成中に CA SDM によって動的に生成される 40 文字の英数字です。 この
    secret_key
    は、CA SDM データベース(
    usp_rest_access テーブル
    )に保存される前に暗号化されます。
  4. secret_key
    は、クライアントが CA SDM REST サーバに対して有効なクライアントとして自身を正しく認証できるようにその後使用する必要があります。 これは、そのリクエストの一部として署名ヘッダを送信するクライアント プログラムによって実行されます。
  5. シグネチャ、Keyed-Hash based Message Authentication Code (
    HMAC - ハッシュベースのメッセージ認証コード
    )は、以下を使用して計算されます。
    1. Secret_Key
    2. NX_STRING_TO_SIGN_FIELDS
      によって提供されるヘッダ フィールド(例:
      日付
      承認
      )(このオプションが同じ順序でインストールされていない場合)。
    3. NX.env 変数
      NX_HMAC_ALGORITHM
      によって提供される暗号化ハッシュ関数(サポートされるアルゴリズムは、
      HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512
      、および
      HmacMD5
      です)。
  6. クライアントは、リクエスト データ、シグネチャおよびアクセス キーを CA SDM に送信します。
  7. CA SDM は、アクセス キーを使用して、永続性ストアから秘密鍵をルックアップします。
  8. CA SDM は、リクエスト データと秘密鍵を使用して、シグネチャを生成します。この際、クライアントが使用したのと同じハッシュ アルゴリズムが使用されます。
  9. CA SDM が生成したシグネチャが、クライアントが送信したシグネチャと一致する場合、リクエストは正規であると判断されます。そうでない場合、リクエストは破棄され、CA SDM はエラー応答を返します。
  10. インストール フォルダには、
    $NX_ROOT/samples/sdk/rest/java/test2_auths
    にいくつかのサンプルと、
    $NX_ROOT/samples/sdk/rest/java‘SampleSDMAuth.java’、‘SampleUsingSecretKey.java’、および ‘HMACUtil.java
    ’ に README.txt が含まれます。
CA SDM REST API からのアクセス キーおよび秘密鍵の作成
クライアントは、SDM REST API から access_key および secret_key を取得する必要があります。 これは、
/caisd-rest/rest_access に POST
を実行して行います。 以下の手順は、Chrome の Postman 拡張を使用して作成されました。 Postman の使用方法の詳細については、この記事を確認するか、Google Chrome ウェブストアで Postman を検索してください。
  1. まず、クライアントは、CA SDM REST API から access_key および secret_key を取得する必要があります。
    これは、
    /caisd-rest/rest_access
    に POST を実行して行います。
    1. 認証タイプを基本認証に設定します。
    2. ユーザ名/パスワードを正しい値で入力します。
    3. リクエストの更新
      ]ボタンをクリックします。
  2. 今すぐタイプ
    ]を[
    権限がありません
    ]に変更し、[
    保存
    ]ボタンをクリックします。
  3. ヘッダ
    ]タブに切り替えて、[権限]に[基本]と、base64 暗号化された文字列がその横に表示されていることを確認します。
  4. 文字列「
    基本
    」を「
    SDM
    」に変更し、残りの base64 文字列はそのままにしておきます。
    [基本]の後にあるスペース文字はそのままにします。
  5. [保存]
    をクリックします。
    基本的に権限ヘッダは、文字列「SDM」、スペース、CA SDM ユーザの base-64 エンコードされたユーザ名/パスワードという形式になっている必要があります。
    上記の例では、以下のようになります。
  6. 送信
    ]をクリックし、CA SDM REST サーバに POST を送信します。
    POST /caisd-rest/rest_access HTTP/1.1
    Host: YourSDMHostName:8553
    Authorization:
    SDM
    cnVkcmEwMjpJbmRUciFwMjAxNw==
    Content-Type: application/xml
    x-obj-attrs: access_key,secret_key,content-type,date
    Cache-Control: no-cache
    <rest_access></rest_access>
  7. CA SDM サーバでは、以下の応答を示します。
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <rest_access id="400502" REL_ATTR="400502" COMMON_NAME="845787692">
    <link href="http://localhost:8050/caisd-rest/rest_access/400502" rel="self"/>
    <access_key>845787692</access_key>
    <expiration_date>1503521363</expiration_date>
    <secret_key>2504166E48DC19294B86773F798DEE7996D3973E</secret_key>
    </rest_access>
  8. secret_key
    access_key
    と共に使用して、その他の必要のある REST 操作を行います。
    このために、リクエストする必要のある文字列の HMAC 暗号化を実行します。 これは、Postman のリクエスト前のスクリプト セクションを作成することにより行います。 たとえば、以下のように SDM REST API の「cnt」オブジェクトからいくつかの属性を取得してください。
    var str = "GET\n/caisd-rest/cnt"
    var secret = "2504166E48DC19294B86773F798DEE7996D3973E";
    postman.setGlobalVariable("hmac", encodeURIComponent(CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA1(str, secret))));
    ここで、秘密鍵は上記の
    手順 6
    の応答として取得されたものです。
    情報の残りの部分は、そのままにすることができます。 これは、基本的にリソース文字列:
    GET\n/rest/caisd-cnt
    と秘密鍵を共に暗号化し、
    HmacSHA1
    アルゴリズムを使用してエンコードします。
  9. 権限
    ]タブに移動し、[
    権限
    ]を以下のように変更します。
    SDM 845787692:{{hmac}}
    ここでは、CA SDM のリテラル文字列に続けて、スペース、
    手順 6
    で取得した CA SDM からのアクセス キー、リテラル文字列
    :{{hmac}}
    です。
  10. リクエスト前のスクリプトで暗号化されるため、リソースとして
    GET
    セクションに
    /caisd-rest/cnt
    が含まれていることを確認します。
  11. X-Obj-Attrs
    ヘッダ キーを値:
    userid, last_name
    で追加します(基本的に、リソース /caisd-rest/cnt から userid, last_name フィールドの値を取得します)。 コードは以下のようになります。
    GET /caisd-rest/cnt HTTP/1.1
    Host: SDMHostName.ca.com:58553
    Authorization: SDM 1842290659:jkd32qsCPwaBcWH0NX93V8zu6sI%3D
    Content-Type: application/xml
    X-Obj-Attrs: userid, last_name
    Cache-Control: no-cache
  12. 保存して送信します。
  13. 以下の応答が受信されます。
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <collection_cnt COUNT="25" START="1" TOTAL_COUNT="36">
    <link href="http://localhost:8050/caisd-rest/cnt?start=26&amp;size=25" rel="next"/>
    <link href="http://localhost:8050/caisd-rest/cnt?start=1&amp;size=36" rel="all"/>
    ..
    ..
    ..
    <cnt id="U'793ED69B4E87A545BD8E911834D829FC'" REL_ATTR="U'793ED69B4E87A545BD8E911834D829FC'" COMMON_NAME="System_AHD_generated">
    <link href="http://localhost:8050/caisd-rest/cnt/U'793ED69B4E87A545BD8E911834D829FC'" rel="self"/>
    <last_name>System_AHD_generated</last_name>
    <userid>ahd</userid>
    </cnt>
    <cnt id="U'7A0E651346BF0E4491EBD37D13962417'" REL_ATTR="U'7A0E651346BF0E4491EBD37D13962417'" COMMON_NAME="System_Argis_User">
    <link href="http://localhost:8050/caisd-rest/cnt/U'7A0E651346BF0E4491EBD37D13962417'" rel="self"/>
    <last_name>System_Argis_User</last_name>
    <userid>System_Argis_User</userid>
    </cnt>
    ..
    ..
    </collection_cnt>