This Flask app has one route that checks for a correct API key in the headers. If the key matches, it returns secret data. Otherwise, it returns an error.
Flask
from flask import Flask, request, jsonify
app = Flask(__name__)
API_KEY = '12345abcde'
@app.route('/secret-data')
def secret_data():
api_key = request.headers.get('x-api-key')
if api_key == API_KEY:
return jsonify({'message': 'Welcome! Here is your secret data.', 'data': [10, 20, 30]})
else:
return jsonify({'error': 'Unauthorized access'}), 401if __name__ == '__main__':
app.run(debug=True)
OutputSuccess
Important Notes
Never expose your API key in public code or client-side apps.
Use HTTPS to keep the API key safe during transmission.
Consider rotating keys regularly for better security.
Summary
API key authentication is a simple way to protect your API.
Clients send a secret key with each request to prove they are allowed.
Always check the key on the server before giving access.
Practice
(1/5)
1. What is the main purpose of using an API key in Flask applications?
easy
A. To style the API output
B. To verify that the client is authorized to access the API
C. To speed up the API response time
D. To store user passwords securely
Solution
Step 1: Understand API key role
An API key is a secret token sent by the client to prove identity.
Step 2: Identify purpose in Flask
The server checks this key to allow or deny access to API resources.
Final Answer:
To verify that the client is authorized to access the API -> Option B
Quick Check:
API key = Authorization [OK]
Hint: API keys prove client identity to server [OK]
Common Mistakes:
Thinking API keys speed up responses
Confusing API keys with styling tools
Using API keys to store passwords
2. Which of the following is the correct way to retrieve an API key from request headers in Flask?
easy
A. api_key = request.cookies.get('X-API-KEY')
B. api_key = request.args['X-API-KEY']
C. api_key = request.form['X-API-KEY']
D. api_key = request.headers.get('X-API-KEY')
Solution
Step 1: Identify where API keys are usually sent
API keys are commonly sent in HTTP headers for security.
Step 2: Use Flask syntax to get header value
Use request.headers.get('Header-Name') to safely retrieve header values.
Final Answer:
api_key = request.headers.get('X-API-KEY') -> Option D
Quick Check:
Headers use request.headers.get() [OK]
Hint: Use request.headers.get() for header values [OK]
Common Mistakes:
Using request.args for headers
Trying to get API key from form data
Looking for API key in cookies
3. Given this Flask code snippet, what will be the response if the client sends a request with header X-API-KEY: wrongkey?
A. Using single equals (=) instead of double equals (==) in if condition
B. Accessing headers with request.headers.get() instead of []
C. Missing return type for response
D. Route decorator syntax is incorrect
Solution
Step 1: Check if condition syntax
The if statement uses '=' which is assignment, not comparison.
Step 2: Correct comparison operator
Use '==' to compare api_key and VALID_KEY for equality check.
Final Answer:
Using single equals (=) instead of double equals (==) in if condition -> Option A
Quick Check:
Comparison needs '==' not '=' [OK]
Hint: Use '==' for comparison, '=' is assignment [OK]
Common Mistakes:
Confusing '=' with '==' in conditions
Thinking request.headers['X-API-KEY'] is wrong
Believing return type must be explicit
5. You want to protect multiple Flask routes using the same API key check without repeating code. Which approach is best to implement this efficiently?
hard
A. Copy the API key check code inside every route function
B. Check the API key only in the first route and assume others are safe
C. Create a decorator function that checks the API key before running the route function
D. Use a global variable to store the API key and skip checks
Solution
Step 1: Understand code reuse for API key checks
Repeating code in every route is inefficient and error-prone.
Step 2: Use a decorator to wrap routes
A decorator can run the API key check before the route logic, applying it to many routes cleanly.
Final Answer:
Create a decorator function that checks the API key before running the route function -> Option C
Quick Check:
Decorator = reusable API key check [OK]
Hint: Use decorators to avoid repeating API key checks [OK]
Common Mistakes:
Copy-pasting code in every route
Skipping checks on some routes
Using global variables to bypass security
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.