🚀 Rocket Resolver Client Authentication & API Access Guide
Step-by-Step Guide

1. Generate an RSA Key Pair


    # Generate a private key
    openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
  
    # Extract the public key from the private key
    openssl rsa -in private_key.pem -pubout -out public_key.pem
    

✅ Generated Files:

  • private_key.pem → Used for signing requests.
  • public_key.pem → Uploaded to Rocket Resolver for authentication.

2. Upload Public Key via Rocket Resolver

1. Login to Rocket Resolver Tenant Admin's Account Management screen.

2. Navigate to the Public API Key Management section.

3. Click the Upload Button and select the public_key.pem file.

✅ No need to manually convert to Base64! Rocket Resolver will handle the encoding automatically.

3. Sign Data Using Private Key


    # Create a JSON payload
    echo -n '{"userEmail": "username@example.com"}' > data.json
  
    # Sign the data using the private key
    openssl dgst -sha256 -sign private_key.pem -out signature.bin data.json
  
    # Convert Data & Signature to Base64
    base64 -w 0 data.json > data_base64.txt
    base64 -w 0 signature.bin > signature_base64.txt
    

✅ Now you have:

  • data_base64.txt → Base64-encoded JSON payload.
  • signature_base64.txt → Base64-encoded signature.

4. Authenticate via cURL (Obtain JWT Token)


    curl -X 'POST' \
      'https://api.rocketresolver.com/api/auth/client-login/{tenantId}' \
      -H 'accept: */*' \
      -H 'Content-Type: application/json' \
      -d '{
      "data": "'$(cat data_base64.txt)'",
      "signature": "'$(cat signature_base64.txt)'"
    }'
    

✅ Server returns a JWT token for authentication.

5. Use JWT Token to Call Client APIs

Example: Fetch a Ticket


    curl -X 'GET' \
      'https://api.rocketresolver.com/api/client-api/ticket/{ticketNumber}' \
      -H "Authorization: Bearer YOUR_JWT_TOKEN" \
      -H 'accept: application/json'
    

✅ Replace {ticketNumber} and YOUR_JWT_TOKEN with actual values.

🔥 Pure Java, Python, and Node.js Examples

🔹 Java Implementation


        
  import java.nio.file.Files;
  import java.nio.file.Paths;
  import java.security.*;
  import java.util.Base64;
  import javax.crypto.Cipher;
  import org.json.JSONObject;
  import java.net.http.*;

  public class ClientAuth {
      public static void main(String[] args) throws Exception {
          String tenantId = "your-tenant-id";
          String data = "{\"userEmail\": \"user@example.com\"}";
          String signedData = signData(data, "private_key.pem");

          String base64Data = Base64.getEncoder().encodeToString(data.getBytes());
          String base64Signature = Base64.getEncoder().encodeToString(signedData.getBytes());

          HttpRequest request = HttpRequest.newBuilder()
              .uri(new java.net.URI("https://api.rocketresolver.com/api/auth/client-login/" + tenantId))
              .header("Content-Type", "application/json")
              .POST(HttpRequest.BodyPublishers.ofString(base64Data))
              .build();

          HttpClient client = HttpClient.newHttpClient();
          HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
          System.out.println("Response: " + response.body());
      }
  }
  
    

🔹 Python Implementation


        
  import requests
  import base64
  import json
  from cryptography.hazmat.primitives import hashes
  from cryptography.hazmat.primitives.asymmetric import padding, serialization

  with open("private_key.pem", "rb") as key_file:
      private_key = serialization.load_pem_private_key(key_file.read(), password=None)

  data = json.dumps({"userEmail": "user@example.com"}).encode()
  signature = private_key.sign(data, padding.PKCS1v15(), hashes.SHA256())

  base64_data = base64.b64encode(data).decode()
  base64_signature = base64.b64encode(signature).decode()

  response = requests.post(
      "https://api.rocketresolver.com/api/auth/client-login/your-tenant-id",
      headers={"Content-Type": "application/json"},
      json={"data": base64_data, "signature": base64_signature}
  )

  print("Response:", response.json())
  
    

🔹 Node.js Implementation


    
  const axios = require("axios");
  const fs = require("fs");
  const crypto = require("crypto");

  const tenantId = "your-tenant-id";
  const data = JSON.stringify({ userEmail: "user@example.com" });

  const privateKey = fs.readFileSync("private_key.pem", "utf8");

  const sign = crypto.createSign("RSA-SHA256");
  sign.update(data);
  const signature = sign.sign(privateKey, "base64");

  const base64Data = Buffer.from(data).toString("base64");

  axios.post(`https://api.rocketresolver.com/api/auth/client-login/${tenantId}`, {
    data: base64Data,
    signature: signature
  })
  .then(response => console.log("Response:", response.data))
  .catch(error => console.error("Error:", error.response ? error.response.data : error.message));
  
    

6. 📌 API Endpoints

  • Get Ticket:GET /api/client-api/ticket/{ticketNumber}
  • Create Ticket:POST /api/client-api/ticket/create
  • Update Ticket Status:PUT /api/client-api/ticket/{ticketNumber}/status
  • Update Ticket Priority:PUT /api/client-api/ticket/{ticketNumber}/priority
  • Update Ticket Type:PUT /api/client-api/ticket/{ticketNumber}/type
  • Add Comment:POST /api/client-api/ticket/{ticketNumber}/comment

✅ Summary

You have now successfully:

  • Generated an RSA key pair.
  • Uploaded the public key.
  • Signed and encoded data & signature.
  • Authenticated and received a JWT token.
  • Accessed Rocket Resolver APIs securely.