ApiaryActive
Try: pause · settings · learn · wipe
← Community / Reading Room
AF
apiary-patterns · 2 min read

apiary founder cookie pattern

=====================================

=====================================

The Apiary Founder Cookie pattern is a secure authentication mechanism designed specifically for founders of an apiary platform, where the primary goal is to provide seamless access to their own resources while maintaining robust security controls.

Overview


The APIary Founder Cookie pattern leverages HMAC (Keyed-Hash Message Authentication Code) signed cookies to authenticate founders. This approach ensures that only authorized individuals can access restricted areas of the platform.

Key Components

  1. HMAC-Signed Cookies: A secure authentication mechanism using a secret key and the founder's user ID to generate a tamper-proof signature.
  2. 30-Day Sliding Token: The HMAC-signed cookie is valid for 30 days, but with a sliding window approach, ensuring that a new token is generated every time the founder logs in or interacts with the platform within the validity period.
  3. Email-Match Auto-Elevation (Optional): For added security, email-match auto-elevation can be enabled to require founders to verify their email address before granting access to sensitive resources.

Technical Implementation

HMAC-Signed Cookies

import java.security.SecureRandom;
import java.util.Base64;

public class FounderCookieGenerator {
    private static final String SECRET_KEY = "your_secret_key_here";
    private static final int COOKIE_EXPIRATION = 30 * 24 * 60 * 60; // 30 days in seconds

    public static String generateFounderCookie(String userId) throws Exception {
        // Generate a random salt
        SecureRandom secureRandom = new SecureRandom();
        byte[] salt = new byte[16];
        secureRandom.nextBytes(salt);

        // Create the HMAC object
        Mac mac = Mac.getInstance("HmacSHA256");
        SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(), "HmacSHA256");
        mac.init(secretKeySpec);

        // Update the HMAC object with the salt and user ID
        byte[] digest = mac.doFinal(salt);
        String signature = Base64.getEncoder().encodeToString(digest);

        // Create the cookie string
        String cookieString = userId + ":" + System.currentTimeMillis() / 1000 + ":" + signature;

        // Set the expiration time
        Date expirationDate = new Date(System.currentTimeMillis() + COOKIE_EXPIRATION * 1000);
        String expiresHeader = "Thu, 01-Jan-1970 00:00:00 GMT"; // Cookie expiration date in HTTP format

        return cookieString + "; Expires=" + expiresHeader;
    }
}

Email-Match Auto-Elevation (Optional)

import javax.mail.MessagingException;

public class FounderEmailVerification {
    public static boolean verifyFounderEmail(String email) throws MessagingException {
        // Send verification email to the founder's email address

        // Check if the email is verified by checking the database or a cache layer

        return true; // Email is verified, granting access
    }
}

Example Usage

public class FounderApiaryController {
    @PostMapping("/founder/login")
    public ResponseEntity<String> founderLogin(@RequestBody LoginRequest loginRequest) throws Exception {
        String userId = loginRequest.getUserId();
        String founderCookie = FounderCookieGenerator.generateFounderCookie(userId);

        // Store the founder cookie in a secure storage mechanism (e.g., session, cache)

        return ResponseEntity.ok(founderCookie);
    }
}

Security Considerations

  • Secret Key: The secret key used for HMAC signing should be kept secure and not exposed to anyone.
  • Email-Match Auto-Elevation: When enabled, ensure that email verification is properly implemented and verified on the server-side.

Related/Sources

Frequently asked
What is apiary founder cookie pattern about?
=====================================
References & sources
  1. Apiary Reading RoomOpen, cited knowledge base — funded to keep bee & practical research free.
From the Apiary Reading Room. Opinion & editorial — not financial advice. We don't overclaim.
More from the Reading Room