HttpRequestAuthedData - スコープ対象

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:27分
  • HttpRequestAuthedData() API は、署名済み REST や SOAP 要求にアクセスして値を設定するメソッドを提供します。

    次の順序でこれらの API を使用して、送信署名要求を生成します。
    1. HttpRequestData:API 要求を構築します。
    2. AuthCredential:資格情報オブジェクトを作成するか、既存のオブジェクトを更新します。資格情報を使用して、RequestAuthAPI クラスで要求に署名します。
    3. RequestAuthAPI:要求に署名し、HttpRequestAuthedData オブジェクトを返します。
    4. HttpRequestAuthedData:署名された要求に関する情報を取得します。
    5. GlideHTTPRequest:署名された要求を送信します。

    これらの API を使用する前に、認証 アルゴリズムを構成し て要求に署名し、要求の認証に使用する認証情報に関連付ける必要があります。

    この API は、sn_auth 名前空間識別子を持つスコープ対象スクリプト内で使用します。 コンストラクタを使用してこのクラスをインスタンス化することも、RequestAuthAPI クラスの generateAuth() メソッドから HttpRequestAuthedData オブジェクトを返すこともできます。

    HttpRequestAuthedData - HttpRequestAuthedData()

    HttpRequestAuthedData オブジェクトをインスタンス化します。

    コンストラクタを使用してこのクラスをインスタンス化することも、RequestAuthAPI クラスの generateAuth() メソッドから HttpRequestAuthedData オブジェクトを返すこともできます。

    表 : 1. パラメーター
    名前 タイプ 説明
    なし

    HttpRequestAuthedData - addHeader(文字列 key, 文字列 value)

    ヘッダーを HttpRequestAuthedData オブジェクトに追加します。

    表 : 2. パラメーター
    名前 タイプ 説明
    key 文字列 HTTP ヘッダーの名前。
    value 文字列 HTTP ヘッダーの値。
    表 : 3. 返される内容
    タイプ 説明
    なし
    // Define HttpRequestData
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    //Get AuthCredential
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create RequestAuthAPI and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
     
    // Update the signed response
    output.addHeader('access-rights', 'public-read');

    HttpRequestAuthedData - addQueryParam(文字列 key, 文字列 value)

    クエリーパラメーターを HttpRequestAuthedData オブジェクトに追加します。

    表 : 4. パラメーター
    名前 タイプ 説明
    key 文字列 クエリーパラメーターの名前。
    value 文字列 クエリーパラメーターの値。
    表 : 5. 返される内容
    タイプ 説明
    なし
    // Define HttpRequestData
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    //Get AuthCredential
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create RequestAuthAPI and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
     
    // Update the signed response
    output.addQueryParameter('api_version', 'v2');

    HttpRequestAuthedData - getCredentialValue()

    要求が署名されたときに含まれていた資格情報の値を返します。

    資格情報の値を使用して、認証アルゴリズムに必要な cookie、署名、またはその他の値を格納します。たとえば、REST または SOAP 呼び出しの 1 回限りのトークンを取得して保存するスクリプトを使用して、接続情報の取得 (GCI) ステップを作成します。

    表 : 6. パラメーター
    名前 タイプ 説明
    なし
    表 : 7. 返される内容
    タイプ 説明
    文字列 資格情報の値のテキスト。

    この例では資格情報の値の取得を示しています。

    var RequestAuthGCISigner = Class.create();
    RequestAuthGCISigner.prototype = Object.extend(new RequestAuthInternal(), {
      initialize: function() {
        RequestAuthInternal.prototype.initialize.call(this);
      },
    
      generateAuth: function(authAPI) {
        var requestData = authAPI.getHttpRequestData();
    
        // get credentials
        var credential = authAPI.getAuthCredential();
        var username = credential.getAttribute("user_name");
        var password = credential.getAttribute("password");
        var httpRequestSignedData = new sn_auth.HttpRequestAuthedData();
        var directive = requestData.getDirective();
    
        // set CREDENTIAL_VALUE
        httpRequestSignedData.setCredentialValue(username+":"+password);
        httpRequestSignedData.setDirective("CREDENTIAL_VALUE");
        httpRequestSignedData.setStatus("SUCCESS");
    
        gs.info("The Credential Value is " + httpRequestSignedData.getCredentialValue());
        return httpRequestSignedData;
      },
      type: 'RequestAuthGCISigner'
    });

    出力:

    The Credential Value is someUsername:somePassword

    HttpRequestAuthedData - getDirective()

    署名がヘッダー内の要求に適用されるか、クエリーパラメーターとして適用されるか、資格情報の値として適用されるかを返します。

    デフォルトでは、署名がヘッダーに適用されます。setDirective() API を使用すると、署名をクエリーパラメーターまたは資格情報の値として適用できます。

    表 : 8. パラメーター
    名前 タイプ 説明
    なし
    表 : 9. 返される内容
    タイプ 説明
    文字列 署名がヘッダーに適用されるか、クエリーパラメーターとして適用されるか、資格情報の値として適用されるか。

    次の値が含まれます。

    • HEADER:署名は要求ヘッダーに適用されます。
    • QUERY:署名はクエリーパラメーターとして適用されます。
    • CREDENTIAL_VALUE:署名は資格情報の値として適用されます。
    // Define HttpRequestData
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    //Get AuthCredential
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create RequestAuthAPI and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
    output.setDirective("header");
    
    gs.info("Signature applied to: " + output.getDirective());

    出力:

    Signature applied to: HEADER

    HttpRequestAuthedData - getHeaderMap()

    要求が署名されたときに含まれていたヘッダーを含むオブジェクトを返します。

    表 : 10. パラメーター
    名前 タイプ 説明
    なし
    表 : 11. 返される内容
    タイプ 説明
    オブジェクト 要求が署名されたときに含まれるすべてのヘッダーを定義するキーと値のペア。キーと値のペアにはそれぞれ次の部分が含まれています。
    • キー:文字列。ヘッダーの名前。
    • 値:文字列。ヘッダーの値。
    // Define the HttpRequestData object
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
    httpRequestData.addHeader('x-amz-acl' , 'public-read' );
     
    // Get an AuthCredential object
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create the RequestAuthAPI object and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
     
    // get the signed response detail
    var authH = headerM["Authorization"];
    var xamzdateH = headerM["X-Amz-Date"];
    var content256 = headerM["x-amz-content-sha256"];
     
    gs.debug('authH:' + authH );
    gs.debug('xamzdateH:' + xamzdateH );
    gs.debug('content256:' + content256 );
    

    出力:

    *** Script: [DEBUG] authH:AWS4-HMAC-SHA256 Credential=lsjfljljfllfwek/20191127/us-east-1/s3/aws4_request, 
    SignedHeaders=host;x-amz-acl;x-amz-content-sha256;x-amz-date, 
    Signature=5c349011324910c34596ba7abbd10e07c4127774049f8953418bd7bed7d02b90 
    *** Script: [DEBUG] xamzdateH:20191127T175210Z 
    *** Script: [DEBUG] content256:UNSIGNED-PAYLOAD

    HttpRequestAuthedData - getQueryMap()

    要求が署名されたときに含まれていたクエリーパラメーターを含むオブジェクトを返します。

    表 : 12. パラメーター
    名前 タイプ 説明
    なし
    表 : 13. 返される内容
    タイプ 説明
    オブジェクト 要求が署名されたときに含まれるクエリーパラメーターを定義するキーと値のペア。キーと値のペアにはそれぞれ次の部分が含まれています。
    • キー:文字列。クエリーパラメーターの名前。
    • 値:文字列。クエリーパラメーターの値。
    // Define the HttpRequestData object
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
    httpRequestData.addQueryParam('api_version', 'v2' );
    httpRequestData.addQueryParam('limit', '1000' );
    httpRequestData.addQueryParam('offset', '1' );
     
    // Get an AuthCredential object
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create the RequestAuthAPI object and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
     
    // Get the signed response
    queryMap = output.getQueryMap();
    
    gs.info("API Version is: " + queryMap["api_version"]);

    出力:

    API Version is: v2

    HttpRequestAuthedData - getStatus()

    要求署名のステータスを返します。

    表 : 14. パラメーター
    名前 タイプ 説明
    なし
    表 : 15. 返される内容
    タイプ 説明
    文字列 要求署名のステータス。

    可能な値:

    • SUCCESS:システムが要求に正常に署名しました。
    • FAIL:システムが要求に署名できませんでした。
    • SKIPPED:情報が不完全であったためにシステムが署名をスキップしました。
    // Define the HttpRequestData object
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    // Get an AuthCredential object
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create the RequestAuthAPI object and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
     
    // Get the signed status
    gs.info("Status is: " + output.getStatus());

    出力:

    Status is: SUCCESS

    HttpRequestAuthedData - getStatusMessage()

    要求の署名に関する詳細なメッセージを返します。要求の署名に失敗した場合、このメソッドはエラーメッセージを返します。

    表 : 16. パラメーター
    名前 タイプ 説明
    なし
    表 : 17. 返される内容
    タイプ 説明
    文字列 要求の署名に関するメッセージ。要求の署名に失敗した場合、次のいずれかのエラーメッセージを返します。
    • credential is not valid:要求の署名に使用した AuthCredential オブジェクトを確認してください。認証アルゴリズムが資格情報に関連付けられていることを確認します。詳細については、「 認証アルゴリズムの構成」を参照してください。
    • Request data is empty. Request auth is skipped:必要な情報が欠落している可能性があるため、HttpRequestData オブジェクトを確認してください。
    • Can't find script includes scope:要求の署名に使用された認証アルゴリズムレコードおよび関連するスクリプトインクルードが正しいスコープ内にあることを確認します。
    // Define the HttpRequestData object
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
    httpRequestData.addQueryParam('api_version', 'v2' );
    httpRequestData.addQueryParam('limit', '1000' );
    httpRequestData.addQueryParam('offset', '1' );
     
    // Get AuthCredential object and set an attribute
    var credential = new sn_auth.AuthCredential();
    credential.setAttribute("user_name", "admin");
    credential.setAttribute("password", "admin");
     
    // Create the RequestAuthAPI object and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
     
    // Get the signed status
    gs.info("Status message is: " + output.getStatusMessage());

    出力:

    Status message is: credential is not valid.

    HttpRequestAuthedData - setCredentialValue(文字列 credential_value)

    HttpRequestAuthedData オブジェクトの資格情報の値を設定します。

    資格情報の値を使用して、認証アルゴリズムに必要な cookie、署名、またはその他の値を格納します。たとえば、REST または SOAP 呼び出しの 1 回限りのトークンを取得して保存するスクリプトを使用して、接続情報の取得 (GCI) ステップを作成します。

    setCredentialValue() メソッドを使用して、ワークフロースタジオ の REST、SOAP、および GCI ステップの [資格情報の値]データピルを設定します。

    表 : 18. パラメーター
    名前 タイプ 説明
    credential_value 文字列 資格情報の値のテキスト。
    表 : 19. 返される内容
    タイプ 説明
    なし

    この例は、GCI ステップの資格情報の値を設定する方法を示しています。

    var RequestAuthGCISigner = Class.create();
    RequestAuthGCISigner.prototype = Object.extend(new RequestAuthInternal(), {
      initialize: function() {
        RequestAuthInternal.prototype.initialize.call(this);
      },
    
      generateAuth: function(authAPI) {
        var requestData = authAPI.getHttpRequestData();
    
        // get credentials
        var credential = authAPI.getAuthCredential();
        var username = credential.getAttribute("user_name");
        var password = credential.getAttribute("password");
        var httpRequestSignedData = new sn_auth.HttpRequestAuthedData();
        var directive = requestData.getDirective();
        var b64data = GlideStringUtil.base64encode(username+":"+password);
    
        // set CREDENTIAL_VALUE
        httpRequestSignedData.setCredentialValue("Basic " + b64data);
        httpRequestSignedData.setDirective("CREDENTIAL_VALUE");
        httpRequestSignedData.setStatus("SUCCESS");
        return httpRequestSignedData;
      },
      type: 'RequestAuthGCISigner'
    });

    HttpRequestAuthedData - setDirective(文字列 directive)

    署名をヘッダー内の署名された要求に適用するか、クエリーパラメーターとして適用するか、資格情報の値として適用するかを定義します。

    表 : 20. パラメーター
    名前 タイプ 説明
    directive 文字列 署名を、署名された要求のヘッダーに適用するか、クエリーパラメーターに適用するか、資格情報の値として適用するか。

    次の値が含まれます。

    • query:署名をクエリーパラメーターとして適用します。
    • header:署名を要求ヘッダーに適用します。
    • credential_value :認証情報の値に署名を適用します。
    表 : 21. 返される内容
    タイプ 説明
    なし
    // Define HttpRequestData
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    //Get AuthCredential
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create RequestAuthAPI and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
    output.setDirective("header");
    

    HttpRequestAuthedData - setStatus(文字列 status)

    要求署名のステータスを設定します。

    表 : 22. パラメーター
    名前 タイプ 説明
    status 文字列 要求署名のステータス。

    可能な値:

    • success:システムが要求に正常に署名しました。
    • fail:システムが要求に署名できませんでした。
    • skipped:情報が不完全であったためにシステムが署名をスキップしました。
    表 : 23. 返される内容
    タイプ 説明
    なし
    // Define the HttpRequestData object
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    // Get an AuthCredential object
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create the RequestAuthAPI object and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
    output.setStatus("fail");
     
    // Get the signed status
    gs.info("Status is: " + output.getStatus());

    出力:

     Status is: FAIL

    HttpRequestAuthedData - setStatusMessage(文字列 statusMessage)

    要求署名のステータスメッセージを設定します。

    表 : 24. パラメーター
    名前 タイプ 説明
    statusMessage 文字列 要求署名のステータスに設定するメッセージ。
    表 : 25. 返される内容
    タイプ 説明
    なし
    // Define the HttpRequestData object
    var endpoint= "https://third-party-endpoint";
    var httpRequestData = new sn_auth.HttpRequestData();
    httpRequestData.setEndpoint(endpoint);
    httpRequestData.setService('s3');
    httpRequestData.setRegion('us-east-1');
    httpRequestData.setHttpMethod("PUT");
    var content = "Action=SendMessage&MessageBody=This is a test message";
    httpRequestData.setContent(content);
     
    // Get an AuthCredential object
    var credential = new sn_cc.StandardCredentialsProvider().getAuthCredentialByID("5b61c16f73533300f662cff8faf6a74b");
     
    // Create the RequestAuthAPI object and sign the request
    var signingAPI = new sn_auth.RequestAuthAPI(httpRequestData, credential);
    var output = signingAPI.generateAuth();
    output.setStatusMessage("The request was successfully signed.");
     
    // Get the signed status message
    gs.info("Status message is: " + output.getStatusMessage());

    出力:

    Status message is: The request was successfully signed.