HttpRequestAuthedData : dans le champ d’application

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 9 minutes de lecture
  • L’API HttpRequestAuthedData() fournit des méthodes permettant d’accéder aux valeurs d’une requête REST ou SOAP signée et de les définir.

    Générez des demandes de signature sortantes à l’aide de ces API dans l’ordre suivant :
    1. HttpRequestData : générer la demande d’API.
    2. AuthCredential : créer un objet d’informations d’identification ou mettre à jour un objet existant. Utilisez les informations d’identification pour signer la demande via la classe RequestAuthAPI .
    3. RequestAuthAPI : signer la requête et renvoyer un objet HttpRequestAuthedData.
    4. HttpRequestAuthedData : obtenir des informations sur la demande signée.
    5. GlideHTTPRequest : envoyer la demande signée.

    Avant d’utiliser ces API, vous devez configurer un algorithme d’authentification pour signer la demande et l’associer aux informations d’identification utilisées pour authentifier la demande.

    Utilisez cette API dans les scripts inclus dans le périmètre avec l’identificateur d’espace de noms sn_auth. Vous pouvez instancier cette classe à l’aide du constructeur, ou vous pouvez renvoyer un objet HttpRequestAuthedData à partir de la méthode generateAuth() dans la classe RequestAuthAPI .

    HttpRequestAuthedData : HttpRequestAuthedData()

    Instancie un objet HttpRequestAuthedData.

    Vous pouvez instancier cette classe à l’aide du constructeur, ou vous pouvez renvoyer un objet HttpRequestAuthedData à partir de la méthode generateAuth() dans la classe RequestAuthAPI .

    Tableau 1. Paramètres
    Nom Type Description
    Néant

    HttpRequestAuthedData : addHeader(clé de chaîne, valeur de chaîne)

    Ajoute un en-tête à l’objet HttpRequestAuthedData.

    Tableau 2. Paramètres
    Nom Type Description
    clé Chaîne Nom de l’en-tête HTTP.
    valide Chaîne Valeur de l’en-tête HTTP.
    Tableau 3. Renvoie
    Type Description
    nul
    // 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(Clé de chaîne, valeur de chaîne)

    Ajoute un paramètre de requête à l’objet HttpRequestAuthedData.

    Tableau 4. Paramètres
    Nom Type Description
    clé Chaîne Nom du paramètre de requête.
    valide Chaîne Valeur du paramètre de requête.
    Tableau 5. Renvoie
    Type Description
    nul
    // 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()

    Renvoie la valeur d’informations d’identification qui était incluse lors de la signature de la demande.

    Utilisez une valeur d’informations d’identification pour stocker un cookie, une signature ou toute autre valeur nécessaire à un algorithme d’authentification. Par exemple, créez une étape GCI (Obtenir des informations de connexion) avec un script qui récupère et stocke un jeton à usage unique pour un appel REST ou SOAP.

    Tableau 6. Paramètres
    Nom Type Description
    Aucun
    Tableau 7. Renvoie
    Type Description
    Chaîne Texte de la valeur d’informations d’identification.

    Cet exemple montre la récupération d’une valeur d’informations d’identification.

    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'
    });

    Sortie :

    The Credential Value is someUsername:somePassword

    HttpRequestAuthedData – getDirective()

    Indique si la signature est appliquée à la demande dans l’en-tête, en tant que paramètre de requête ou en tant que valeur d’informations d’identification.

    Par défaut, le système applique la signature à l’en-tête. Vous pouvez appliquer la signature en tant que paramètre de requête ou valeur d’informations d’identification à l’aide de l’API setDirective( ).

    Tableau 8. Paramètres
    Nom Type Description
    Aucun
    Tableau 9. Renvoie
    Type Description
    Chaîne Indique si la signature est appliquée à l’en-tête, en tant que paramètre de requête ou en tant que valeur d’informations d’identification.

    Les valeurs comprennent :

    • EN-TÊTE : la signature est appliquée à l’en-tête de la demande.
    • QUERY : La signature est appliquée en tant que paramètre de requête.
    • CREDENTIAL_VALUE : la signature est appliquée comme valeur d’informations d’identification.
    // 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());

    Sortie :

    Signature applied to: HEADER

    HttpRequestAuthedData : getHeaderMap()

    Renvoie un objet contenant les en-têtes qui étaient inclus lors de la signature de la demande.

    Tableau 10. Paramètres
    Nom Type Description
    Aucun
    Tableau 11. Renvoie
    Type Description
    Objet Paires clé-valeur qui définissent tous les en-têtes inclus lors de la signature de la demande. Chaque paire clé-valeur comprend les parties suivantes :
    • clé : Chaîne. Nom de l’en-tête.
    • valeur : chaîne. Valeur de l’en-tête.
    // 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 );
    

    Sortie :

    *** 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()

    Renvoie un objet contenant les paramètres de requête inclus lors de la signature de la demande.

    Tableau 12. Paramètres
    Nom Type Description
    Aucun
    Tableau 13. Renvoie
    Type Description
    Objet Paires clé-valeur qui définissent les paramètres de requête inclus lors de la signature de la demande. Chaque paire clé-valeur comprend les parties suivantes :
    • clé : Chaîne. Nom du paramètre de requête.
    • valeur : chaîne. Valeur du paramètre de requête.
    // 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"]);

    Sortie :

    API Version is: v2

    HttpRequestAuthedData : getStatus()

    Renvoie l’état de la signature de la demande.

    Tableau 14. Paramètres
    Nom Type Description
    Aucun
    Tableau 15. Renvoie
    Type Description
    Chaîne L’état de la signature de la demande.

    Valeurs possibles :

    • RÉUSSITE : le système a signé la demande avec succès.
    • ÉCHEC : le système n’a pas réussi à signer la demande.
    • SKIPPED : le système a ignoré la signature, car les informations étaient incomplètes.
    // 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());

    Sortie :

    Status is: SUCCESS

    HttpRequestAuthedData : getStatusMessage()

    Renvoie un message détaillé sur la signature de la demande. Si la signature de demande échoue, cette méthode renvoie le message d’erreur.

    Tableau 16. Paramètres
    Nom Type Description
    Aucun
    Tableau 17. Renvoie
    Type Description
    Chaîne Message sur la signature de la demande. Si la signature de demande échoue, renvoie l’un des messages d’erreur suivants :
    • Les informations d’identification ne sont pas valides : vérifiez l’objet AuthCredential que vous avez utilisé pour signer la demande. Assurez-vous qu’un algorithme d’authentification est associé aux informations d’identification. Pour plus d’informations, consultez Configurer un algorithme d’authentification.
    • Les données de la demande sont vides. L’authentification de la demande est ignorée : vérifiez l’objet HttpRequestData, car les informations requises peuvent être manquantes.
    • Impossible de trouver le périmètre de l’include de script : vérifiez que l’enregistrement de l’algorithme d’authentification et les includes de script associés utilisés pour signer la demande se trouvent dans la portée correcte.
    // 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());

    Sortie :

    Status message is: credential is not valid.

    HttpRequestAuthedData : setCredentialValue(chaîne credential_value)

    Définit une valeur d’informations d’identification pour l’objet HttpRequestAuthedData.

    Utilisez une valeur d’informations d’identification pour stocker un cookie, une signature ou toute autre valeur nécessaire à un algorithme d’authentification. Par exemple, créez une étape GCI (Obtenir des informations de connexion) avec un script qui récupère et stocke un jeton à usage unique pour un appel REST ou SOAP.

    Utilisez la méthode setCredentialValue() pour définir la pastille de données Valeur d’informations d’identification pour les étapes REST, SOAP et GCI dans Studio de workflow.

    Tableau 18. Paramètres
    Nom Type Description
    credential_value Chaîne Texte de la valeur d’informations d’identification.
    Tableau 19. Renvoie
    Type Description
    Néant

    Cet exemple montre comment définir une valeur d’informations d’identification pour une étape 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 String)

    Définit s’il faut appliquer la signature à la demande signée dans l’en-tête, en tant que paramètre de requête ou en tant que valeur d’informations d’identification.

    Tableau 20. Paramètres
    Nom Type Description
    directive Chaîne Indique s’il faut appliquer la signature à l’en-tête, au paramètre de requête ou à la valeur d’informations d’identification de la demande signée.

    Les valeurs comprennent :

    • query : applique la signature comme paramètre de requête.
    • header : applique une signature à l’en-tête de la demande.
    • credential_value : applique une signature à la valeur d’informations d’identification.
    Tableau 21. Renvoie
    Type Description
    nul
    // 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(String status)

    Définit l’état de signature de la demande.

    Tableau 22. Paramètres
    Nom Type Description
    statut Chaîne L’état de la signature de la demande.

    Valeurs possibles :

    • réussite : le système a signé la demande avec succès.
    • fail : le système n’a pas réussi à signer la demande.
    • skipted : le système a ignoré la signature, car les informations étaient incomplètes.
    Tableau 23. Renvoie
    Type Description
    nul
    // 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());

    Sortie :

     Status is: FAIL

    HttpRequestAuthedData : setStatusMessage(String statusMessage)

    Définit un message d’état pour la signature de la demande.

    Tableau 24. Paramètres
    Nom Type Description
    statusMessage Chaîne Message à définir pour l’état de signature de la demande.
    Tableau 25. Renvoie
    Type Description
    nul
    // 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());

    Sortie :

    Status message is: The request was successfully signed.