---
sourceDocument: Xanadu IT Operations Management
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/xanadu/it-operations-management

 Release :

    - xanadu

ft:locale :

    - ja-JP

ft:publication_title :

    - Xanadu IT Operations Management

ft:clusterId :

    - itom

bundleId :

    - itom

workflow :

    - Technology


---

# キーベースの MID Web サーバー認証の設定

# キーベースの MID Web サーバー認証の設定 {#ariaid-title1}

* リリースバージョン: Xanadu
* 
* 更新日 2024年08月01日
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 所要時間：4分

キーベースの認証を使用して、MID Web サーバー拡張のセキュリティを強化します。着信したクライアント要求の \[認証\] ヘッダーで送信する認証トークンを生成します。{#configure-mid-web-server-extension-metric-data__ph_MIDWebServerShortDesc}

## 始める前に

注:  
この手順は、Xanadu より前のリリースとの互換性を保つためだけのものです。Xanadu リリースで MID Web サーバー を設定する手順の詳細については、「[MID Web サーバー 拡張の設定](https://servicenow-prod.fluidtopics.net/Apooo0iziQzXHh6kOp4pnA "MID Web サーバー は、イベントとメトリクスを MID サーバー に送信する REST API の開発を可能にする MID サーバー 拡張です。この拡張は、メトリックインテリジェンス や MID Web サービスイベントリスナー、エージェントクライアントコレクター Websocket エンドポイント拡張といった他の MID サーバー 拡張によって活用されます。")」を参照してください。

* MID サーバー を展開して起動します。
* MID Web サーバー 拡張を設定し、認証タイプとして \[キーベース\] を選択します。詳細については、「[MID Web サーバー拡張の設定](https://servicenow-prod.fluidtopics.net/Apooo0iziQzXHh6kOp4pnA "MID Web サーバー は、イベントとメトリクスを MID サーバー に送信する REST API の開発を可能にする MID サーバー 拡張です。この拡張は、メトリックインテリジェンス や MID Web サービスイベントリスナー、エージェントクライアントコレクター Websocket エンドポイント拡張といった他の MID サーバー 拡張によって活用されます。")」を参照してください。

{#configure-mid-web-server-extension-metric-data__ul_mvm_k4y_zrb}

必要なロール：agent_admin

## 手順

1. スクリプトプログラムを使用して、HTTP/HTTPS 要求の定義済み要素 (MID Web サーバー 拡張エンドポイントにアクセスするクライアントから受信した HTTP 動詞、コンテンツタイプヘッダー、および要求パス) を使用して文字列をビルドし、トークンを作成します。
2. \[秘密キー\] に表示される自動生成された秘密キーを使用して、生成された文字列に署名することによって、HMAC (ハッシュメッセージ認証コード) 文字列を作成します。  
   このキーはコンテキストごとに一意です。
3. 要求の \[認証\] ヘッダーに、この認証トークンを送信する際の情報を入力します。  
   {#configure-mid-web-server-extension-metric-data__table_dsc_k3w_nrb__entry__2}

   | アイテム | 値 |
   |-|-|
   | 生データ送信用の Web サービス API へのパス | URL 形式： https://\<MID サーバー IP アドレス\>:\<ポート番号\>/api/mid/sa/metrics Web サーバー拡張で設定 されているポート番号のいずれかと一致するポート番号を使用してください。 例：http://10.10.10.10:8097/api/mid/sa/metrics |
   | 要求タイプ | POST |
   | 日付形式 | yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 例：2016-06-08T20:54:58.917Z |
   | Content-Type | application/json |
   [ ]

   {#configure-mid-web-server-extension-metric-data__table_dsc_k3w_nrb}

   必要な文字列を生成するには、HTTP 動詞、コンテンツタイプ、日付、および要求パスという要求要素を使用します。これらの要素を指定し、次の順に配置します。
   * HTTP 動詞 + "\\n" +
   * コンテンツタイプ + "\\n" +
   * 日付 + "\\n" +
   * 要求パス

   {#configure-mid-web-server-extension-metric-data__ul_bg4_p3w_nrb}

   この例では、要求文字列は次のとおりです。

   <kbd class="ph userinput">POST\napplication/json\n2016-06-08T20:54:58.917Z\n/api/mid/sa/metrics</kbd>

   タイムスタンプ要件の場合は、要求を認証するために、HTTP 日付ヘッダーを使用する有効なタイムスタンプが必要です。タイムスタンプが MID サーバーの 15 分以内であることを確認します。
{#configure-mid-web-server-extension-metric-data__steps_nd5_flc_bx}

## Java を使用して HTTP/HTTPS 要求の定義済み要素を使用する文字列の HMAC を生成する方法 {#configure-mid-web-server-extension-metric-data__example_mzb_yxs_1sb}

    package sample;
    import com.glide.util;
    import java.security.SignatureException;

    import javax.crypto.Mac;
    import javax.crypto.spec.SecretKeySpec;

    public class AuthUtil {
    	
    private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

    /***
     * Generates base64-encode the HMAC(Hash Message Authentication Code) of input data
     * 
     * @param data
     * @param key
     * @return
     * @throws java.security.SignatureException
     */
    public static String signData(String data, String key) throws java.security.SignatureException {
    	String result;
    	try {
    		// get an hmac_sha1 key from the raw key bytes
    		SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);

    		// create hmac_sha1 Mac instance and initialize with the signing key
    		Mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
    		mac.init(signingKey);

    		// compute the hmac on input data bytes
    		byte[] rawHmac = mac.doFinal(data.getBytes("UTF-8"));

    		// base64-encode the hmac
    		result = Base64.encode(rawHmac);

    	} catch (Exception e) {
    		throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
    	}
    	return result;
    }
    }


