API key authentication in Rest API - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When checking API key authentication, we want to know how the time to verify a key changes as more keys exist.
We ask: How does the process scale when the number of stored API keys grows?
Analyze the time complexity of the following code snippet.
// Example: Check if provided API key is valid
function isValidApiKey(providedKey, storedKeys) {
for (let key of storedKeys) {
if (key === providedKey) {
return true;
}
}
return false;
}
This code checks each stored API key one by one to find a match with the provided key.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the list of stored API keys.
- How many times: Up to once for each stored key until a match is found or all keys checked.
As the number of stored keys grows, the time to check can grow roughly the same amount.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 key checks |
| 100 | Up to 100 key checks |
| 1000 | Up to 1000 key checks |
Pattern observation: The time grows directly with the number of keys; doubling keys roughly doubles checks.
Time Complexity: O(n)
This means the time to verify an API key grows linearly with the number of stored keys.
[X] Wrong: "Checking an API key always takes the same time no matter how many keys there are."
[OK] Correct: Because the code may need to look through many keys before finding a match or deciding none match, so more keys usually mean more work.
Understanding how checking API keys scales helps you design faster and smarter authentication systems, a useful skill in many real projects.
"What if we stored the API keys in a hash map instead of a list? How would the time complexity change?"
Practice
Solution
Step 1: Understand the role of API keys
API keys are used to identify and authorize clients accessing an API.Step 2: Differentiate from other security methods
API keys do not encrypt data or store passwords; they control access.Final Answer:
To control and restrict access to the API -> Option CQuick Check:
API key = Access control [OK]
- Confusing API keys with encryption keys
- Thinking API keys store user passwords
- Assuming API keys improve speed
Solution
Step 1: Identify common header names for API keys
Many APIs use the header 'X-API-KEY' to send the API key securely.Step 2: Differentiate from other header formats
'Authorization: Bearer' is for tokens, not API keys; 'Api-Key' and 'Key' are less standard.Final Answer:
X-API-KEY: YOUR_API_KEY -> Option DQuick Check:
Standard header = X-API-KEY [OK]
- Using 'Authorization: Bearer' for API keys
- Sending API key as 'Key' header
- Confusing API key with OAuth token
import requests
headers = {"X-API-KEY": "12345"}
response = requests.get("https://api.example.com/data", headers=headers)
print(response.status_code)
What will this code print if the API key is valid and the request succeeds?Solution
Step 1: Understand HTTP status codes
200 means success, 401 means unauthorized, 404 means not found, 500 means server error.Step 2: Analyze the code behavior with valid API key
With a valid API key, the server should authorize the request and respond with 200.Final Answer:
200 -> Option BQuick Check:
Valid key = 200 OK [OK]
- Confusing 401 Unauthorized with success
- Assuming 404 means invalid key
- Thinking 500 is related to API key
import requests url = "https://api.example.com/data?api_key=12345" response = requests.get(url) print(response.status_code)The server always returns 401 Unauthorized. What is the most likely problem?
Solution
Step 1: Check if sending API key in URL is allowed
Many APIs accept API keys in URL parameters, so this is often valid.Step 2: Consider the 401 Unauthorized response
401 usually means invalid or missing credentials, so the key value is likely wrong.Final Answer:
The API key value is incorrect -> Option AQuick Check:
401 = Invalid credentials [OK]
- Assuming URL parameters never work for API keys
- Ignoring that 401 means invalid credentials
- Thinking requests library can't send URL parameters
Solution
Step 1: Understand key rotation best practices
Rotating keys means replacing old keys with new ones to improve security.Step 2: Ensure clients have time to update keys
Disabling old keys immediately can break clients; a grace period avoids this.Final Answer:
Generate a new key, distribute it, then disable the old key after a grace period -> Option AQuick Check:
Grace period = smooth key rotation [OK]
- Disabling old key immediately causing client failures
- Never rotating keys risking security
- Sending keys in URL exposing them
