Authentication overview

Lazada, as a prominent e-commerce platform in Southeast Asia, provides an Open Platform for developers to integrate with its services, enabling functionalities such as product management, order processing, and logistics tracking. Secure access to these APIs is managed through an authentication process designed to protect both seller data and platform integrity. The Lazada Open Platform employs an authentication model rooted in OAuth 2.0, a standard protocol for access delegation. This approach allows third-party applications to obtain limited access to a user's account without exposing their credentials directly. The core components of this system include an App Key, an App Secret, and grant types to facilitate the exchange of authorization codes for Access Tokens and Refresh Tokens.

The authentication flow typically involves an application requesting authorization from a user (a Lazada seller), who then grants permission. Upon successful authorization, Lazada redirects the user back to the application with an authorization code. This code is then exchanged for an Access Token, which is a short-lived credential used to sign API requests. A Refresh Token is also issued, which can be used to obtain new Access Tokens once the current one expires, minimizing the need for repeated user authorization. This mechanism aligns with industry best practices for securing API access, ensuring that applications only have the necessary permissions and that access can be revoked if compromised or no longer needed. For a broader understanding of OAuth 2.0, resources like the OAuth 2.0 specification provide detailed information on its design principles and security considerations.

Supported authentication methods

Lazada's Open Platform primarily supports an OAuth 2.0-based authorization flow for its APIs. This method is standard for granting secure, delegated access to resources. Developers integrate with Lazada's system by registering their application to receive unique credentials. The process ensures that applications can perform actions on behalf of a seller without ever handling the seller's primary login credentials.

OAuth 2.0 Authorization Code Grant

The Authorization Code Grant is the most common and recommended OAuth 2.0 flow for web applications and is the foundation for Lazada's authentication. This flow involves several steps:

  1. Authorization Request: The client application redirects the user's browser to Lazada's authorization server, requesting specific permissions (scopes).
  2. User Consent: The user logs into Lazada (if not already logged in) and is prompted to grant or deny the requested permissions to the application.
  3. Authorization Code: If the user grants consent, Lazada's authorization server redirects the user's browser back to the client application's pre-registered redirect URI, including an authorization code.
  4. Token Exchange: The client application then sends this authorization code, along with its App Key and App Secret, to Lazada's token endpoint from its backend server.
  5. Token Issuance: Lazada's token endpoint validates the request and, if valid, issues an Access Token and a Refresh Token to the client application.

The Access Token is a temporary credential used to make authenticated API calls, typically with a limited lifespan. The Refresh Token is a long-lived credential used to obtain new Access Tokens once the current one expires, without requiring the user to re-authorize the application. This separation of concerns enhances security by limiting the exposure of long-term credentials and enabling granular control over access. More details on Lazada's specific implementation of this flow are available in the Lazada Open Platform documentation.

Signature-based authentication

In addition to OAuth 2.0, Lazada API requests require a signature parameter to ensure the integrity and authenticity of the request. This signature is generated using a specific algorithm that combines the request parameters, the API method, and the application's App Secret. The signature acts as a tamper-detection mechanism, verifying that the request has not been altered in transit and that it originates from a legitimate source. This method complements OAuth 2.0 by providing message-level security for each API call, even after an Access Token has been obtained.

Authentication methods table

Method When to Use Security Level
OAuth 2.0 (Authorization Code Grant) For server-side web applications and services requiring delegated access to seller accounts. High: Provides delegated access, refresh token mechanism, and short-lived access tokens.
Signature-based authentication For all API requests to ensure message integrity and authenticity alongside an Access Token. High: Protects against tampering and unauthorized request origination.

Getting your credentials

To begin integrating with the Lazada Open Platform, developers must first register an application. This process provides the foundational credentials necessary for authentication. The primary credentials you will receive are the App Key and App Secret.

Application registration

  1. Access the Lazada Open Platform: Navigate to the Lazada Open Platform developer portal.
  2. Create a Developer Account: If you don't already have one, register for a developer account. This typically involves providing basic contact information and agreeing to the platform's terms of service.
  3. Register a New Application: Within your developer account dashboard, locate the option to create a new application. You will be prompted to provide details such as:
    • Application Name: A descriptive name for your integration.
    • Application Type: Specify if it's a web application, mobile app, etc.
    • Redirect URI(s): This is a crucial security parameter. It's the URL(s) to which Lazada will redirect the user after they authorize your application. Ensure this URI is secure (HTTPS) and strictly controlled, as it prevents authorization codes from being intercepted by malicious parties. You can register multiple redirect URIs for different environments (e.g., development, staging, production).
  4. Receive App Key and App Secret: Upon successful registration, Lazada will issue your unique App Key (sometimes referred to as Client ID) and App Secret (sometimes referred to as Client Secret). The App Secret is a highly sensitive credential and should be treated with the same care as a password; never expose it in client-side code or public repositories.

Obtaining Access and Refresh Tokens

Once you have your App Key and App Secret, you can initiate the OAuth 2.0 Authorization Code Grant flow to obtain Access Tokens and Refresh Tokens:

  1. Initiate Authorization: Construct an authorization URL that includes your App Key, desired scopes (permissions), and a registered redirect_uri. Redirect the user's browser to this URL.
  2. Handle Redirect: After the user grants authorization, Lazada redirects their browser back to your redirect_uri with an authorization code in the query parameters.
  3. Exchange Code for Tokens: From your server-side application, make a POST request to Lazada's token endpoint. This request must include the received code, your App Key, App Secret, and the redirect_uri. The response will contain the Access Token (short-lived) and the Refresh Token (long-lived).
  4. Store Tokens Securely: Store the Refresh Token securely in your backend system (e.g., an encrypted database). The Access Token can be kept in memory or a secure cache for its validity period.

The Lazada Open Platform documentation provides specific endpoints and parameter details for each step of this process.

Authenticated request example

After successfully obtaining an Access Token, you can use it to make authenticated API requests to the Lazada Open Platform. All requests must also include a signature for verification. The following example demonstrates a conceptual Java implementation for making an authenticated API call.

Example: Constructing a Signed API Request (Conceptual Java)

This example illustrates how to generate the signature and include necessary parameters for an API call. For actual implementation, refer to the official Lazada SDKs and documentation.

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class LazadaApiExample {

    private static final String APP_KEY = "YOUR_APP_KEY";
    private static final String APP_SECRET = "YOUR_APP_SECRET";
    private static final String ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"; // Obtained via OAuth 2.0
    private static final String API_GATEWAY_URL = "https://api.lazada.com/rest";

    public static void main(String[] args) throws Exception {
        // 1. Define API method and parameters
        String apiMethod = "/order/get"; // Example API method
        Map<String, String> params = new HashMap<>();
        params.put("app_key", APP_KEY);
        params.put("timestamp", String.valueOf(System.currentTimeMillis()));
        params.put("sign_method", "sha256"); // Or "hmac"
        params.put("access_token", ACCESS_TOKEN);
        params.put("order_id", "1234567890"); // Example parameter for /order/get
        // Add other required API parameters here

        // 2. Generate the signature
        String sign = generateSignature(apiMethod, params, APP_SECRET);
        params.put("sign", sign);

        // 3. Construct the request URL
        String queryString = params.entrySet().stream()
                .map(entry -> {
                    try {
                        return entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.toString());
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                })
                .collect(Collectors.joining("&"));

        String requestUrl = API_GATEWAY_URL + apiMethod + "?" + queryString;

        System.out.println("Full API Request URL: " + requestUrl);

        // In a real application, you would now make an HTTP GET or POST request to this URL
        // using a library like OkHttp or Apache HttpClient.
        // The Lazada SDKs (Java, PHP, Python, C#) abstract much of this signature generation.
    }

    private static String generateSignature(String apiMethod, Map<String, String> params, String appSecret) throws Exception {
        // Sort parameters alphabetically by key
        TreeMap<String, String> sortedParams = new TreeMap<>(params);

        // Concatenate method and sorted parameters
        StringBuilder signSource = new StringBuilder(apiMethod);
        for (Map.Entry<String, String> entry : sortedParams.entrySet()) {
            signSource.append(entry.getKey()).append(entry.getValue());
        }

        // Prepend and append App Secret, then hash
        String finalSignSource = appSecret + signSource.toString() + appSecret;

        // Use SHA-256 (or HMAC-SHA256 if sign_method is "hmac")
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest(finalSignSource.getBytes(StandardCharsets.UTF_8));

        // Convert byte array to hexadecimal string
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString().toUpperCase();
    }
}

This conceptual example demonstrates the key steps: gathering all required parameters, sorting them, concatenating them with the API method and App Secret, and then hashing the resulting string to generate the signature. The signature, along with the Access Token and other parameters, is then included in the final API request. The Lazada Open Platform documentation provides detailed instructions and official SDKs (Java, PHP, Python, C#) that automate much of this signature generation and request signing process, making integration simpler and less error-prone.

Security best practices

Adhering to security best practices is crucial when integrating with the Lazada Open Platform to protect sensitive seller data and maintain application integrity. Mismanagement of credentials or insecure coding practices can lead to unauthorized access, data breaches, and reputational damage.

Credential management

  • Protect your App Secret: Treat your App Secret as a highly confidential password. Never embed it directly in client-side code (e.g., JavaScript in a browser), mobile applications, or public source code repositories. It should only be used on your secure backend servers.
  • Securely store Refresh Tokens: Refresh Tokens are long-lived and can be used to obtain new Access Tokens. Store them securely in an encrypted database or a secure vault on your server, not in plain text. Implement proper access controls to limit who can retrieve these tokens.
  • Rotate credentials: While Lazada's system handles Access Token expiry and renewal via Refresh Tokens, periodically review your App Key and App Secret. If Lazada provides a mechanism to rotate them, utilize it, especially if there's any suspicion of compromise.
  • Environment variables: For development and deployment, use environment variables or a secrets management service (e.g., AWS Secrets Manager, Google Secret Manager, Azure Key Vault) to inject credentials into your application at runtime, rather than hardcoding them. This practice is detailed in various security guides, such as Google Cloud's secret management documentation.

API request security

  • Always use HTTPS: Ensure all communication with Lazada's API endpoints occurs over HTTPS. This encrypts data in transit, protecting against eavesdropping and man-in-the-middle attacks.
  • Validate redirect URIs: When registering your application, specify strict and secure HTTPS redirect_uris. Ensure your application verifies the state parameter in the OAuth 2.0 flow to prevent Cross-Site Request Forgery (CSRF) attacks.
  • Implement proper error handling: Do not expose sensitive information (like stack traces or internal error messages) in API responses to clients. Log detailed errors on your server for debugging.
  • Rate limiting and abuse prevention: Implement client-side rate limiting and robust input validation to prevent your application from being used to launch denial-of-service attacks or to exploit API vulnerabilities.

Application and infrastructure security

  • Principle of Least Privilege: Request only the necessary API scopes (permissions) for your application to function. Avoid requesting broad permissions if your application only needs specific ones. This limits the blast radius if your application is compromised.
  • Regular security audits: Periodically review your application's code and infrastructure for security vulnerabilities. Conduct penetration testing and vulnerability assessments.
  • Keep SDKs updated: If you are using one of Lazada's official SDKs (Java, PHP, Python, C#), ensure it is kept up-to-date. SDK updates often include security patches and improvements.
  • Logging and monitoring: Implement comprehensive logging for all authentication attempts, token refreshes, and API calls. Monitor these logs for unusual activity that might indicate an attempted breach or compromise.